Tipe data integer dari suatu fungsi. Variabel. Penunjukan tipe postfix


KE data mengacu pada informasi apa pun yang disajikan dalam bentuk yang memungkinkan Anda mengotomatiskan pengumpulan, penyimpanan, dan pemrosesannya di komputer (angka, simbol, bit, dll.).
Data dalam program bisa berupa asli(diatur pada input program) atau hasil pengolahan(menengah atau akhir pekan).
Semua data - variabel dan konstanta - termasuk dalam tipe tertentu.
Setiap tipe data memiliki asosiasinya masing-masing jarak nilai(jumlah byte untuk satu nilai) dan operasi yang valid.

Tipe data pada C/C++ dibagi menjadi dasar Dan turunan.
Jenis utamanya meliputi:

  1. ruang kosong(tipe kosong),
  2. ke dalam(tipe bilangan bulat),
  3. mengambang(angka floating point nyata),
  4. dobel(bilangan real floating point presisi ganda),
  5. arang(tipe karakter),
  6. bodoh- logis.

Tipe komposit

Untuk menghasilkan jenis penggunaan data lainnya dasar jenis + yang disebut penentu. Tipe data yang dibuat dari tipe standar menggunakan penentu disebut tipe data komposit. C++ mendefinisikan empat penentu tipe data:
  1. pendek - pendek;
  2. Panjang panjang;
  3. ditandatangani-ditandatangani;
  4. tidak ditandatangani
Tipe turunannya adalah:
  • array,
  • fungsi,
  • kelas,
  • tanda-tanda,
  • tautan,
  • struktur,
  • asosiasi.

Tipe karakter

Tipe data arang selalu menempati 1 byte di memori komputer. Hal ini disebabkan oleh fakta bahwa biasanya jumlah memori yang dialokasikan untuk nilai tipe karakter sama dengan yang diperlukan untuk menyimpan 256 karakter keyboard mana pun.
Tipe karakternya bisa dengan sebuah tanda atau tidak ditandatangani.
Dalam jumlah yang ditandatangani karakter yang ditandatangani Anda dapat menyimpan nilai dalam rentang -128 hingga 127. Oleh karena itu, nilai variabel seperti karakter yang tidak ditandatangani dapat berkisar dari 0 hingga 255.
Tipe data Jarak nilai Ukuran
arang -128...+127 1 byte
karakter yang tidak ditandatangani 0...255 1 byte
karakter yang ditandatangani -128...127 1 byte

Saat bekerja dengan data karakter, Anda perlu mengingat jika suatu ekspresi mengandung karakter tunggal, itu harus diapit kutipan tunggal. Urutan karakter, yaitu string, bila digunakan dalam ekspresi adalah dalam tanda kutip ganda. Misalnya: 'F', '3', “Ivan”, “235”

Tipe bilangan bulat

Tipe data ke dalam dalam memori komputer dapat menempati 2, 4 atau 8 byte. Hal ini tergantung pada ukuran bit prosesor.
Secara default, semua tipe integer dianggap ditandatangani, yaitu penentu tertanda(tanda) mungkin tidak ditentukan.
Penentu tidak ditandatangani(unsigned) hanya mengizinkan bilangan positif untuk diwakili.

Rentang nilai bilangan bulat

Tipe data Jarak nilai Ukuran (byte)
ke dalam
masuk ke dalam
ditandatangani panjang in
-2147483648 ... 2147483647 4
tidak ditandatangani ke dalam
tidak ditandatangani int panjang
0 ... 4294967295 4
int pendek
menandatangani int pendek
-32768 ... 32767 2
unsigned int pendek 0... 65535 2
panjang panjang int \(-(2^{63}-1)...(2^{63}-1)\) 8
tidak ditandatangani panjang
panjang ke dalam
\(0...(2^{64}-1)\) 8

Tipe nyata

Representasi internal bilangan real dalam memori komputer berbeda dengan representasi bilangan bulat. Angka floating point diwakili oleh dalam bentuk eksponensial. $$\pm saya\pm p$$ di mana M- mantissa (bilangan bulat atau pecahan dengan titik desimal), R- urutan (bilangan bulat). Untuk mengonversi bilangan dalam bentuk eksponensial ke notasi titik tetap biasa, Anda perlu mengalikan mantissa dengan sepuluh pangkat orde. Misalnya: \(-6.42E+2=-6.42*10^(2)\ )

Rentang nilai tipe nyata

Tipe data Jarak nilai Ukuran (byte)
mengambang 3.4E-38 ... 3.4E+38 4
dobel 1.7E-308... 1.7E+308 8
ganda panjang 3.4E-4932 ... 3.4E+4932 10

Panjang mantissa menentukan ketepatan bilangan, dan panjang urutan jangkauannya.
Data float membutuhkan 4 byte, dimana 1 bit biner dialokasikan untuk tanda, 8 bit untuk eksponen dan 23 untuk mantissa. Karena digit paling signifikan dari mantissa selalu 1, maka mantissa tidak disimpan.
Data tipe ganda menempati 8 byte, masing-masing memiliki -11 bit untuk pesanan dan -52 bit untuk mantissa.
Penentu tipe panjang sebelum nama tipe ganda menunjukkan bahwa 10 byte dialokasikan untuk nilai tersebut.

Tipe Boolean

Ketik variabel bodoh hanya dapat mengambil dua nilai BENAR(benar atau PALSU(berbohong). Nilai apa pun yang bukan nol ditafsirkan sebagai benar, dan ketika dikonversi ke tipe bilangan bulat, nilainya menjadi 1. Nilai salah direpresentasikan dalam memori sebagai 0.

Ketik batal

Kumpulan nilai jenis ini kosong.
Tipe void digunakan untuk:
  • definisi fungsi yang tidak mengembalikan nilai;
  • untuk menentukan daftar argumen fungsi yang kosong;
  • sebagai tipe dasar untuk pointer;
  • dalam operasi konversi tipe.

Mendeklarasikan Variabel

Variabel adalah area memori bernama yang menyimpan nilai tipe tertentu.
Variabelnya memiliki Nama(pengidentifikasi) dan arti.
Nama berfungsi untuk mengakses area memori tempat nilai disimpan.
Nama(identifier) ​​​​adalah kumpulan huruf, angka, dan garis bawah yang menentukan nama variabel, nama fungsi, atau kata kunci dalam suatu program. Bahasa C/C++ peka huruf besar-kecil (yaitu Jumlah dan jumlah akan diperlakukan sebagai dua variabel berbeda).
Di mana, jenis– kata kunci yang mendefinisikan jumlah memori (jumlah byte) yang dialokasikan untuk menyimpan nilai variabel (sebagai objek program), (int – integer, float, double – real, char – simbolik, bool – logis);
Namapengidentifikasi unik variabel yang menentukan alamat simbolis dari objek program di memori komputer;
pemrakarsa– nilai awal variabel, yang mungkin tidak ada dalam deskripsi.
Contoh: Variabel yang berjenis sama dapat dikelompokkan dengan cara memisahkannya dengan tanda “,”. Deskripsi Variabel jenis yang berbeda dipisahkan oleh " ; "
Tergantung di mana mereka dideklarasikan, variabel dalam bahasa C/C++ dapat dibagi menjadi tiga kelas:
  1. lokal - dideklarasikan di dalam suatu fungsi dan hanya tersedia di dalamnya;
  2. global - dijelaskan sebelumnya semua fungsi dan dapat diakses dari mana saja dalam program;
  3. parameter formal fungsi dijelaskan dalam daftar parameter fungsi.
Contoh:

Tipe bilangan bulat (int)

Ketik ukuran ke dalam tidak ditentukan oleh standar, tetapi bergantung pada komputer dan kompiler.

Untuk prosesor 16-bit, 2 byte dialokasikan untuk nilai jenis ini,

untuk 32-bit - 4 byte.

Penentu pendek sebelum nama tipe menunjukkan kepada kompiler bahwa 2 byte harus dialokasikan untuk nomor tersebut, terlepas dari kedalaman bit prosesor.

Penentu panjang berarti nilai integer akan menempati 4 byte.

Jadi pada komputer 16-bit, int dan short int setara

dan pada 32-bit - int dan int panjang.

Representasi internal nilai tipe integer - bilangan bulat dalam kode biner. Saat menggunakan penentu tertanda Bit paling signifikan dari suatu bilangan ditafsirkan bertanda (0 adalah bilangan positif, 1 adalah bilangan negatif). Penentu tidak ditandatangani hanya mengizinkan angka positif untuk direpresentasikan, karena bit paling signifikan diperlakukan sebagai bagian dari kode angka tersebut. Jadi, rentang nilai int bergantung pada penentu. Rentang nilai tipe integer dengan berbagai penentu untuk komputer yang kompatibel dengan IBM PC diberikan dalam tabel “Rentang nilai tipe data sederhana”.

Secara default, semua tipe bilangan bulat dianggap ditandatangani, artinya penentu yang ditandatangani dapat dihilangkan.

Konstanta yang ditemukan dalam suatu program ditetapkan satu tipe atau lainnya sesuai dengan tipenya. Jika karena alasan tertentu tidak sesuai dengan programmer, Anda dapat secara eksplisit menunjukkan tipe yang diperlukan menggunakan sufiks L, l (long) dan U, u (unsigned). Misalnya, konstanta 32L akan bertipe panjang dan menempati 4 byte. Anda dapat menggunakan akhiran L dan U secara bersamaan, misalnya 0x22UL atau 05Lu.

Catatan. Jenis short int, long int, sign int, dan unsigned int masing-masing dapat disingkat menjadi short, long, sign, dan unsigned.

Tipe karakter (karakter)

Nilai suatu tipe karakter dialokasikan sejumlah byte yang cukup untuk mengakomodasi karakter apa pun dari kumpulan karakter untuk komputer tertentu, yang menentukan nama tipe tersebut. Biasanya ini adalah 1 byte. Tipe char, seperti tipe integer lainnya, dapat ditandatangani atau tidak. Nilai yang ditandatangani dapat menyimpan nilai dalam rentang -128 hingga 127. Menggunakan penentu unsigned, nilai dapat berkisar dari 0 hingga 255. Ini cukup untuk menyimpan karakter apa pun dalam kumpulan karakter ASCII 256 karakter. Nilai bertipe char juga digunakan untuk menyimpan bilangan bulat.



Tipe karakter yang diperluas (wchar_t)

Jenis wchar_t dirancang untuk bekerja dengan sekumpulan karakter yang 1 byte tidak cukup untuk dikodekan. Misalnya Unicode. Ukuran jenis ini bergantung pada implementasi; sebagai aturan, itu sesuai dengan tipenya pendek. Konstanta string bertipe wchar_t ditulis dengan awalan L, misalnya L “Gates”.

Tipe Boolean (bool)

Nilai Boolean hanya dapat mengambil nilai BENAR Dan PALSU, yang merupakan kata-kata khusus. Bentuk internal yang merepresentasikan nilai false adalah 0 (nol). Nilai lainnya ditafsirkan sebagai benar. Saat mengonversi ke tipe integer BENAR memiliki nilai 1.

Jenis floating point (float, double dan long double)

Standar C++ mendefinisikan tiga tipe data untuk menyimpan nilai nyata: float, double, dan long double.

Tipe data floating-point disimpan secara berbeda di memori dibandingkan tipe data integer. Representasi internal bilangan real terdiri dari dua bagian - mantissa Dan memesan.

Pada komputer yang kompatibel dengan IBM PC, nilai bertipe mengambang menempati 4 byte, dimana satu digit biner dialokasikan di bawah tanda mantissa, 8 digit dalam urutan dan 23 di bawah mantissa. Mantissa adalah angka yang lebih besar dari 1,0 tetapi kurang dari 2,0. Karena digit terdepan mantissa selalu 1, maka mantissa tidak disimpan.

Untuk jumlah jenis dobel, menempati 8 byte, masing-masing 11 dan 52 bit dialokasikan untuk pesanan dan mantissa. Panjang mantissa menentukan ketepatan bilangan, dan panjang eksponen menentukan jangkauannya. Seperti yang dapat Anda lihat dari tabel di akhir entri, dengan jumlah byte yang sama dialokasikan untuk nilai float dan long int, rentang nilai yang diizinkan sangat berbeda. karena bentuk representasi internal.

Penentu panjang sebelum nama tipe dobel menunjukkan bahwa 10 byte dialokasikan untuk nilainya.

Konstanta floating-point bertipe ganda secara default. Anda dapat secara eksplisit menentukan tipe konstanta menggunakan sufiks F, f (float) dan L, l (long).

Misalnya, konstanta 2E+6L akan bertipe long double, dan konstanta 1,82f akan bertipe float.

Saat menulis program yang bersifat universal untuk platform berbeda, Anda tidak dapat membuat asumsi tentang ukuran jenisnya ke dalam. Untuk mendapatkannya, Anda harus menggunakan operasi sizeof, yang hasilnya adalah ukuran tipe dalam byte.

Misalnya untuk sistem operasi MS-DOS sizeof (int) akan menghasilkan 2, tetapi untuk Windows 98 atau OS/2 hasilnya akan menjadi 4.

Standar ANSI tidak menentukan rentang nilai untuk tipe dasar; hanya hubungan antara ukurannya yang ditentukan, misalnya:

sizeof(float) ≤ slzeof(ganda) ≤ sizeof(panjang ganda)
sizeof(char) ≤ slzeof(pendek) ≤ sizeof(int) ≤ sizeof(panjang)

Catatan. Nilai minimum dan maksimum yang diperbolehkan untuk tipe integer bergantung pada implementasi dan diberikan dalam file header (), karakteristik tipe nyata - dalam file (), serta dalam templat kelas numerik_batas

ketik kosong

Selain yang terdaftar, tipe bahasa utama termasuk tipe void, tetapi kumpulan nilai tipe ini kosong. Ini digunakan untuk mendefinisikan fungsi yang tidak mengembalikan nilai, untuk menentukan daftar argumen fungsi yang kosong, sebagai tipe dasar untuk pointer, dan dalam operasi pengecoran tipe.

Jenis yang berbeda tipe integer dan real, berbeda dalam jangkauan dan keakuratan representasi data, diperkenalkan untuk memberikan kesempatan kepada programmer untuk menggunakan kemampuan peralatan tertentu secara paling efektif, karena kecepatan perhitungan dan jumlah memori bergantung pada pilihan. jenis. Namun program yang dioptimalkan untuk satu jenis komputer mungkin tidak portabel untuk platform lain, jadi secara umum Anda harus menghindari ketergantungan pada karakteristik tertentu tipe data.

Jenis Jarak nilai Ukuran (byte)
bodoh benar dan salah
karakter yang ditandatangani -128 … 127
karakter yang tidak ditandatangani 0 … 255
menandatangani int pendek -32 768 … 32 767
unsigned int pendek 0 … 65 535
ditandatangani panjang in -2 147 483 648 … 2 147 483 647
tidak ditandatangani int panjang 0 … 4 294 967 295
mengambang 3.4e-38 … 3.4e+38
dobel 1.7e-308 … 1.7C+308
ganda panjang 3.4e-4932 … 3.4e+4932

Struktur program

Program C++ terdiri dari fungsi, deskripsi Dan arahan praprosesor. Salah satu fungsi harus mempunyai nama utama. Eksekusi program dimulai dengan pernyataan pertama dari fungsi ini. Definisi fungsi paling sederhana memiliki format berikut:

Biasanya, suatu fungsi digunakan untuk menghitung suatu nilai, sehingga tipenya ditunjukkan sebelum nama fungsi. Di bawah ini adalah informasi terpenting tentang fungsinya:

  • jika fungsi tidak mengembalikan nilai, tipe void ditentukan:
  • isi fungsinya adalah sebuah blok dan oleh karena itu diapit oleh kurung kurawal;
  • fungsi tidak dapat disarangkan;
  • Setiap pernyataan diakhiri dengan titik koma (kecuali pernyataan majemuk).

Contoh struktur program yang berisi fungsi main, fl dan f2:

Program ini dapat terdiri dari beberapa modul(file sumber).

Catatan tentang I/O di C++

Bahasa C++ tidak memiliki fasilitas input/output bawaan - bahasa ini dijalankan menggunakan fungsi, tipe, dan objek yang terdapat dalam pustaka standar.

Dua metode yang digunakan: fungsi yang diwarisi dari bahasa C dan objek C++.

Fungsi I/O gaya C dasar:

int scanf (format const char*, ...) // masukan
int printf(format const char*, ...) // keluaran

Mereka melakukan input dan output yang diformat dari sejumlah nilai yang berubah-ubah sesuai dengan string format. String format berisi karakter yang disalin ke aliran (di layar) pada keluaran atau diminta dari aliran (dari keyboard) pada masukan, dan spesifikasi konversi dimulai dengan tanda %, yang diganti dengan nilai tertentu pada masukan dan keluaran.

Contoh program yang menggunakan fungsi I/O gaya C:

#termasuk
ke dalam utama() (
ke dalam aku;
printf("Masukkan bilangan bulat\n");
scanf("%d", &i);
printf("Anda memasukkan angka %d, terima kasih!", i);
kembali 0;
}

Baris pertama program ini adalah direktif praprosesor, yang menyisipkan file header ke dalam teks program yang berisi deskripsi fungsi input/output yang digunakan dalam program (dalam pada kasus ini tanda kurung siku adalah unsur bahasa). Semua arahan praprosesor dimulai dengan tanda #.

Baris ketiga adalah deskripsi variabel tipe integer bernama i.

Fungsi printf pada baris 4 mencetak prompt "Masukkan bilangan bulat" dan menuju ke garis baru sesuai dengan urutan escape \n. Fungsi scanf menyimpan bilangan bulat yang dimasukkan dari keyboard ke dalam variabel i (tanda & menandakan operasi mendapatkan alamat), dan pernyataan berikut menampilkan string yang ditentukan di dalamnya, menggantikan spesifikasi konversi dengan nilai angka ini.

Program menggunakan perpustakaan kelas C++:

#termasuk
ke dalam utama() (
ke dalam aku;
cout<< "Введите целое число\N"; cin >> saya;
cout<< "Вы ввели число " << i << ", спасибо!";
kembali 0;
}

File header berisi deskripsi sekumpulan kelas untuk mengelola input/output. Ini mendefinisikan objek aliran standar cin untuk input keyboard dan cout untuk tampilan, serta pengoperasian penempatan di aliran< < и чтения из потока >>.

Anda dapat menggunakan kedua metode pengorganisasian input/output, namun tidak disarankan untuk menggabungkan keduanya dalam satu program.

Dalam pemrograman, tipe data adalah kumpulan dari dua himpunan: himpunan nilai dan himpunan operasi yang dapat diterapkan padanya. Misalnya, operasi penjumlahan (+), perkalian (*), pembagian bilangan bulat (/), sisa (%), dan pengurangan (−) dapat diterapkan pada tipe data bilangan bulat non-negatif yang terdiri dari himpunan bilangan asli berhingga.

Bahasa pemrograman biasanya memiliki sekumpulan tipe data primitif—tipe yang disediakan oleh bahasa pemrograman sebagai unit bawaan dasar. Dalam C++, pencipta bahasa menyebut tipe seperti itu sebagai tipe fundamental. Tipe dasar dalam C++ adalah:

  • boolean(bodoh);
  • karakter (misalnya char);
  • int (misalnya int);
  • floating point (misalnya float);
  • enumerasi (ditentukan oleh programmer);
  • ruang kosong .

Selain yang terdaftar, tipe berikut dibuat:

  • demonstratif (misalnya int*);
  • array (misalnya char);
  • referensi (misalnya ganda&);
  • struktur lainnya.

Mari beralih ke konsep literal (misalnya, 1, 2.4F, 25e-4, 'a', dll.): literal adalah entri dalam kode sumber program yang mewakili nilai tetap. Dengan kata lain, literal hanyalah representasi dari suatu objek (nilai) dari beberapa tipe dalam kode program. C++ memiliki kemampuan untuk menulis nilai integer, floating-point, karakter, boolean, dan string.

Literal tipe integer dapat ditulis sebagai:

  • sistem bilangan ke-10. Misalnya, 1205 ;
  • Sistem bilangan ke-8 dengan format 0+angka. Misalnya, 0142;
  • Sistem bilangan ke-16 dengan format 0x + bilangan. Misalnya, 0x2F.

24, 030, 0x18 - ini semua adalah catatan dari nomor yang sama dalam sistem nomor yang berbeda.
Untuk menulis bilangan floating point, gunakan notasi titik: 0,1, 0,5, 4. - baik dalam
notasi eksponensial - 25e-100. Seharusnya tidak ada spasi dalam catatan seperti itu.

Nama yang dapat kita gunakan untuk mengasosiasikan nilai yang ditulis dalam literal disebut variabel. Variabel adalah area memori yang diberi nama atau dapat dialamatkan, yang alamatnya dapat digunakan untuk mengakses data. Data ini ditulis, ditulis ulang, dan dihapus dalam memori dengan cara tertentu selama eksekusi program. Variabel memungkinkan Anda mengakses data kapan saja dan, jika perlu, mengubahnya. Data yang dapat diambil dari nama variabel disebut nilai variabel.
Untuk menggunakan suatu variabel dalam suatu program, variabel tersebut harus dideklarasikan, dan jika perlu, dapat didefinisikan (= diinisialisasi). Deklarasi suatu variabel dalam teks program harus berisi 2 bagian: tipe dasar dan deklarator. Penentu dan penginisialisasi adalah bagian opsional:

Contoh const int = 3; // di sini const adalah penentu // int adalah tipe dasar // contoh adalah nama variabel // = 3 - penginisialisasi.

Nama variabel merupakan rangkaian karakter yang terdiri dari huruf latin (huruf kecil dan besar), angka dan/atau garis bawah, namun karakter pertama tidak boleh berupa angka. Nama variabel harus dipilih agar selalu mudah ditebak apa yang disimpannya, misalnya “Pembayaran Bulan”. Dalam catatan dan praktiknya, kita akan menggunakan notasi CamelCase untuk aturan pencatatan variabel. Nama variabel tidak boleh sama dengan kata-kata yang disediakan dalam bahasa tersebut; contoh kata-kata tersebut adalah: if, while, function, goto, switch, dll.

Selain nama variabel, deklarator dapat berisi karakter tambahan:

  • * - penunjuk; sebelum nama;
  • *const - penunjuk konstan; sebelum nama;
  • & - tautan; sebelum nama;
  • - Himpunan; setelah nama;
  • () - fungsi; setelah nama.

Penginisialisasi memungkinkan Anda menentukan nilai variabel segera setelah deklarasinya. Penginisialisasi dimulai dengan literal persamaan (=) dan kemudian melanjutkan dengan menetapkan nilai variabel. Secara umum, tanda sama dengan di C++ menunjukkan operasi penugasan; dengan bantuannya Anda dapat mengatur dan mengubah nilai suatu variabel. Ini mungkin berbeda untuk tipe yang berbeda.

Penentu menentukan atribut tambahan selain tipe. Penentu const yang diberikan dalam contoh memungkinkan Anda untuk melarang perubahan selanjutnya pada nilai variabel. Variabel yang tidak dapat diubah seperti itu disebut konstan atau konstan.

Mendeklarasikan konstanta tanpa inisialisasi tidak akan berfungsi karena alasan logis:

Konstan ke EMPTY_CONST; // kesalahan, variabel konstan tidak diinisialisasi const int CONTOH = 2; // konstanta dengan nilai 2 CONTOH = 3; // error, mencoba memberikan nilai ke variabel konstan

Saat memberi nama konstanta, biasanya hanya menggunakan huruf kapital, memisahkan kata dengan karakter garis bawah.

Tipe data dasar di C++

Saat memeriksa setiap tipe, pembaca tidak boleh melupakan definisi tipe data.

1. Tipe integer (char, short (int), int, long (int), long long)

Dari namanya mudah dipahami bahwa himpunan nilai terdiri dari bilangan bulat. Selain itu, kumpulan nilai dari masing-masing tipe yang terdaftar dapat ditandatangani atau tidak ditandatangani. Jumlah elemen yang terdapat dalam suatu himpunan bergantung pada ukuran memori yang digunakan untuk menyimpan nilai tipe tersebut. Misalnya, untuk variabel bertipe char, 1 byte memori dialokasikan, sehingga total elemennya adalah:

  • 2 8N = 2 8 * 1 = 256, dimana N adalah ukuran memori dalam byte untuk menyimpan nilai

Dalam hal ini, rentang bilangan bulat yang tersedia adalah sebagai berikut:

  • - untuk karakter yang tidak ditandatangani
  • [-128..127] - untuk karakter yang ditandatangani

Secara default, variabel integer dianggap bertanda. Untuk menunjukkan dalam kode bahwa suatu variabel harus tidak ditandatangani, atribut yang ditandatangani ditambahkan ke tipe dasar di sebelah kiri, yaitu. tidak ditandatangani:

Nilai panjang yang tidak ditandatangani; // menentukan tipe integer (panjang) yang tidak ditandatangani.

Jenis yang tercantum hanya berbeda dalam ukuran memori yang diperlukan untuk penyimpanan. Karena bahasa C++ cukup bergantung pada mesin, standar bahasa hanya menjamin kondisi berikut:

  • 1 = ukuran char ≤ ukuran pendek ≤ ukuran int ≤ ukuran panjang.

Biasanya ukuran tipenya adalah sebagai berikut: char - 1, short - 2, int - 4, long -8, long long - 8 byte.

Anda dapat melakukan operasi aritmatika dengan nilai bertipe integer: +, -, *, /, %; operasi perbandingan: ==, !=,<=, <, >, >=; operasi bit: &, |, xor,<<, >>.
Sebagian besar operasi, seperti penjumlahan, perkalian, pengurangan, dan perbandingan, mudah dipahami. Terkadang, setelah melakukan operasi aritmatika, hasilnya mungkin berada di luar rentang nilai; dalam hal ini program akan menghasilkan kesalahan.
Pembagian bilangan bulat (/) mencari bagian bilangan bulat dari satu bilangan bulat dibagi dengan bilangan bulat lainnya. Misalnya:

  • 6 / 4 = 1;
  • 2 / 5 = 0;
  • 8 / 2 = 4.

Simbol persentase (%) menunjukkan operasi penentuan sisa pembagian dua bilangan bulat:

  • 6 % 4 = 2;
  • 10 % 3 = 1.

Operasi yang lebih sulit untuk dipahami adalah operasi bitwise: & (DAN), | (ATAU), xor (eksklusif ATAU),<< (побитовый сдвиг влево), >> (pergeseran ke kanan sedikit demi sedikit).

Operasi bit AND, OR dan XOR menerapkan operasi logika yang sesuai untuk setiap bit informasi:

  • 1 10 = 01 2
  • 3 10 = 11 2
  • 1 10 & 3 10 = 01 2 & 11 2 = 01 2
  • 1 10 | 3 10 = 01 2 | 11 2 = 11 2
  • 1 10 xor 3 10 = 01 2 xor 11 2 = 10 2

Dalam pemrosesan gambar, 3 saluran digunakan untuk warna: merah, biru dan hijau - ditambah transparansi, yang disimpan dalam variabel int, karena setiap saluran memiliki rentang nilai dari 0 hingga 255. Pada sistem bilangan heksadesimal dituliskan nilai tertentu sebagai berikut: 0x180013FF; maka nilai 18 16 sesuai dengan saluran merah, 00 16 - biru, 13 16 - hijau, FF - saluran alfa (transparansi). Untuk memilih saluran tertentu dari bilangan bulat tersebut, saluran yang disebut digunakan. mask, dimana posisi yang kita minati adalah F 16 atau 1 2. Artinya, untuk menyorot nilai saluran biru, Anda harus menggunakan topeng, mis. sedikit demi sedikit DAN:

Int saluran_biru = 0x180013FF & 0x00FF0000;

Setelah itu nilai yang dihasilkan digeser ke kanan sebanyak jumlah bit yang diperlukan.

Pergeseran bit menggeser angka ke kiri atau ke kanan sebanyak digit biner yang ditentukan di sisi kanan operasi. Misalnya angka 39 untuk tipe char ditulis dalam biner sebagai berikut: 00100111. Maka:

Char binerContoh = 39; // 00100111 hasil karakter = contoh biner<< 2; // сдвигаем 2 бита влево, результат: 10011100

Jika variabelnya bertipe unsigned maka hasilnya adalah angka 156, untuk variabel bertanda sama dengan -100. Perhatikan bahwa untuk tipe bilangan bulat bertanda, satuan dalam bit paling signifikan dari representasi bit adalah tanda bahwa bilangan tersebut negatif. Dalam hal ini, nilai dalam bentuk biner yang terdiri dari semua bernilai -1; jika 1 hanya pada digit paling signifikan, dan digit sisanya nol, maka bilangan tersebut memiliki nilai minimum untuk tipe tertentu: untuk char adalah -128.

2. Tipe titik mengambang (float, double (float))

Himpunan nilai floating-point adalah bagian dari bilangan real, tetapi tidak semua bilangan real dapat direpresentasikan dalam bentuk biner, yang terkadang menyebabkan kesalahan bodoh:

Nilai mengambang = 0,2; nilai == 0,2; // error, nilai di sini tidak akan sama dengan 0,2.

Saat bekerja dengan variabel floating-point, pemrogram tidak boleh menggunakan uji persamaan atau pertidaksamaan, melainkan biasanya digunakan uji untuk berada dalam interval tertentu:

Nilai - 0,2< 1e-6; // ok, подбирать интервал тоже нужно осторожно

Selain operasi perbandingan, tipe floating point mendukung 4 operasi aritmatika yang sepenuhnya sesuai dengan operasi matematika dengan bilangan real.

3. Tipe Boolean (logis) (bool)

Hanya terdiri dari dua nilai: benar (true) dan salah (false). Untuk bekerja dengan variabel jenis ini, operasi logika digunakan: ! (TIDAK), == (kesetaraan), != (ketidaksetaraan), && (logis DAN), || (logis ATAU). Hasil dari setiap operasi dapat ditemukan pada tabel kebenaran yang sesuai. Misalnya:

XY XOR0 0 0 0 1 1 1 0 1 1 1 0

4. Tipe karakter (char, wchar_t)

Tipe char tidak hanya bertipe integer (biasanya tipe ini disebut byte), tetapi juga bertipe karakter, menyimpan nomor karakter dari tabel sebagai karakter ASCII. Misalnya, kode 0x41 sesuai dengan karakter 'A', dan 0x71 - 't'.

Terkadang perlu menggunakan karakter yang tidak ditetapkan dalam tabel ASCII dan oleh karena itu memerlukan lebih dari 1 byte untuk penyimpanan. Ada karakter luas untuk mereka (wchar_t).

5.1. Array

Array memungkinkan Anda menyimpan sekumpulan elemen berurutan dengan tipe yang sama. Array disimpan dalam memori sebagai blok yang berdekatan, sehingga Anda tidak dapat mendeklarasikan array tanpa menentukan ukurannya. Untuk mendeklarasikan array, tanda kurung siku () ditulis setelah nama variabel yang menunjukkan ukurannya. Misalnya:

Ke dalam array saya; // Array 5 elemen bertipe integer

Untuk menginisialisasi array, nilai dicantumkan dalam kurung kurawal. Anda dapat menginisialisasi dengan cara ini hanya pada saat deklarasi variabel. Omong-omong, dalam hal ini tidak perlu menentukan ukuran array:

Peluang int = (1, 3, 7, 9, 11); // Array diinisialisasi dengan 5 nilai

Untuk mengakses nilai tertentu dalam array (elemen array), gunakan operasi akses indeks () yang menunjukkan nomor elemen (angka dimulai dari 0). Misalnya:

Kemungkinan; // akses ke elemen pertama array. Mengembalikan nilai peluang 1; // akses ke elemen ketiga. Mengembalikan nilai 7 odds = 13; // Menetapkan nilai baru pada elemen ke-5 dari array odds; // kesalahan akses

5.3. string

Untuk menulis sebuah string, pemrogram menggunakan gagasan bahwa string adalah rangkaian karakter (array) yang berurutan. Untuk mengidentifikasi akhir baris, gunakan karakter akhir baris khusus: '\0'. Karakter khusus ini, yang terdiri dari garis miring terbalik dan karakter pengidentifikasi, disebut karakter kontrol atau karakter escape. Ada juga, misalnya, '\n' - awal baris baru, '\t' - tabulasi. Untuk menulis garis miring terbalik dalam sebuah string, escape digunakan - garis miring lain ditempatkan sebelum tanda itu sendiri: '\'. Escaping juga digunakan untuk menulis tanda kutip.

Mari buat variabel string:

Char textContoh = ('T', 'e', ​​​​'s', 't', '\0'); // string “Tes” ditulis

Ada notasi yang disederhanakan untuk inisialisasi string:

Char textContoh = “Uji”; // Karakter terakhir belum ditulis, namun ukurannya tetap 5

Tanpa menjelaskan secara detail, berikut adalah tipe data lain yang berguna - string. string
Tipe ini dapat, misalnya, ditambahkan:

String halo = "Halo,"; string nama = "Maks!"; string hello_name = halo + nama; // Dapatkan string "Halo, Max!"

6. Tautan

Ke dalam a = 2; // variabel "a" menunjuk ke nilai 2 int &b = a; // variabel “b” menunjuk ke tempat yang sama dengan “a” b = 4; // dengan mengubah nilai b, pemrogram mengubah nilai a. Sekarang a = 4 int &c = 4; // kesalahan, Anda tidak dapat melakukan ini karena referensi tidak dapat diberi nilai

7. Indeks

Untuk memahami tipe data ini, Anda perlu mengingat bahwa banyak nilai tipe ini adalah alamat sel memori tempat data dimulai. Pointer juga mendukung operasi penjumlahan (+), pengurangan (-) dan dereferensi (*).

Alamat 0x0 berarti penunjuknya kosong, mis. tidak menunjuk pada data apa pun. Alamat ini memiliki literalnya sendiri - NULL:

Int *nullPtr = BATAL; // penunjuk nol

Menambah dan mengurangi alamat dengan bilangan bulat atau alamat lain memungkinkan
berpindah-pindah memori yang tersedia untuk program.

Operasi pengambilan data yang dimulai dari alamat yang disimpan dalam sebuah pointer disebut dereferencing (*). Program membaca jumlah sel memori yang diperlukan dan mengembalikan nilai yang disimpan dalam memori.

Int nilaiDalamMemori = 2; // menyetel variabel bertipe integer int *somePtr = // salin alamat variabel, di sini & - mengembalikan alamat variabel somePtr; // alamat sel memori, misalnya 0x2F *somePtr; // nilainya disimpan dalam 4 sel: 0x2F, 0x30, 0x31 dan 0x32

Operasi penugasan, yang secara sintaksis sama dengan operasi penyalinan, tidak tersedia untuk pointer. Dengan kata lain, Anda dapat menyalin alamat penunjuk lain atau alamat suatu variabel, tetapi Anda tidak dapat menentukan sendiri nilai alamat tersebut.

Pointer itu sendiri disimpan dalam memori, seperti nilai variabel tipe lainnya, dan menempati 4 byte, sehingga Anda dapat membuat pointer ke pointer.

8. Transfer

Enumerasi adalah satu-satunya tipe dasar yang ditentukan oleh programmer. Pada umumnya, enumerasi adalah himpunan konstanta bilangan bulat bernama, dengan nama enumerasi menjadi tipe dasarnya.

Warna enum (MERAH, BIRU, HIJAU);

Secara default, MERAH = 0, BIRU = 1, HIJAU = 2. Oleh karena itu, nilai-nilai tersebut dapat dibandingkan satu sama lain, yaitu. MERAH< BLUE < GREEN. Программист при объявлении перечисления может самостоятельно задать значения каждой из констант:

Akses enum (BACA = 1, TULIS = 2, EXEC = 4);

Seringkali lebih mudah menggunakan enumerasi yang nilainya merupakan pangkat dua, karena dalam representasi biner, bilangan pangkat 2 akan terdiri dari 1 dan nol. Misalnya:

8 10 = 00001000 2

Hasil penjumlahan angka-angka ini selalu dengan jelas menunjukkan angka mana yang ditambahkan:

37 10 = 00100101 2 = 00000001 2 + 00000100 2 + 00100000 2 = 1 10 + 4 10 + 32 10

Ruang kosong

Secara sintaksis, tipe void termasuk dalam tipe fundamental, tetapi hanya dapat digunakan sebagai bagian dari tipe yang lebih kompleks, karena Tidak ada objek bertipe void. Biasanya, tipe ini digunakan untuk menunjukkan bahwa suatu fungsi tidak memiliki nilai kembalian atau sebagai tipe dasar penunjuk ke objek dengan tipe yang tidak ditentukan:

Benda kosong; // error, tidak ada objek bertipe void void // error, tidak ada referensi ke void void *ptr; // oke, simpan pointer ke tipe yang tidak diketahui

Seringkali kita akan menggunakan void secara khusus untuk menunjukkan bahwa suatu fungsi tidak mengembalikan nilai apa pun. Penunjuk tipe kosong digunakan ketika pemrogram bertanggung jawab penuh atas integritas memori dan pengecoran tipe yang benar.

Pemeran

Seringkali diperlukan untuk melemparkan nilai suatu variabel dari satu tipe ke tipe lainnya. Dalam kasus di mana himpunan nilai dari tipe asli adalah himpunan bagian dari tipe yang lebih besar (misalnya, int adalah himpunan bagian dari panjang dan panjang adalah ganda), kompiler dapat secara implisit ( secara implisit) mengubah jenis nilai.

bilangan bulat = 2; mengambang mengambang = bilangan bulat; // mengambang = 2.0

Pemeran tipe terbalik akan dilakukan dengan hilangnya informasi, sehingga hanya bagian bilangan bulat dari bilangan floating-point yang tersisa, bagian pecahan akan hilang.

Ada kemungkinan konversi tipe eksplisit; untuk ini, di sebelah kiri variabel atau nilai apa pun dari tipe aslinya, tulis tipe yang akan digunakan dalam tanda kurung:

Nilai int = (int) 2,5;

Operasi unary dan biner

Operasi yang kita lakukan tadi disebut biner: di kiri dan kanan simbol operasi terdapat nilai atau variabel, misalnya 2 + 3. Selain operasi biner, bahasa pemrograman juga menggunakan operasi unary yang berlaku untuk variabel . Mereka dapat ditempatkan di sebelah kiri atau kanan variabel; beberapa operasi serupa telah ditemui sebelumnya - operasi dereferensi (*) dan pengambilan alamat variabel (&) bersifat unary. Operator “++” dan “—” masing-masing menambah dan mengurangi nilai variabel integer sebesar 1, dan dapat ditulis di kiri atau kanan variabel.

C++ juga menggunakan notasi singkat untuk operasi biner jika sisi kiri dan kanan ekspresi berisi variabel yang sama, yaitu. beberapa operasi dilakukan pada nilai suatu variabel dan hasil operasi disimpan dalam variabel yang sama:

SEBUAH += 2; // sama seperti a = a + 2; b /= 5; // sama seperti b = b / 5; c &= 3; // sama seperti c = c & 3;

Tag: variabel C. char, int, unsigned, long, long long, float, double, long double, long float, pelingkupan leksikal. Deklarasi variabel. Area visibilitas. Inisialisasi variabel. Nama variabel. Bentuk eksponensial.

Variabel

Variabel digunakan untuk menyimpan nilai (sic!). Variabel dicirikan oleh tipe dan nama. Mari kita mulai dengan namanya. Dalam C, variabel dapat dimulai dengan garis bawah atau huruf, namun tidak boleh dengan angka. Variabel dapat mencakup karakter bahasa Inggris, angka, dan garis bawah. Variabel tidak boleh cocok dengan kata kunci (ini adalah kata khusus yang digunakan sebagai konstruksi kontrol, untuk menentukan tipe, dll.)

mobil dobel ke dalam struktur
merusak kalau tidak panjang mengalihkan
daftar typedef arang eksternal
kembali ruang kosong kasus mengambang
tidak ditandatangani bawaan untuk tertanda
Persatuan Mengerjakan jika ukuran dari
tidak stabil melanjutkan enum pendek
ketika Di barisan
Serta sejumlah kata lain yang khusus untuk versi compiler ini, misalnya jauh, di dekat, kecil, sangat besar, asm, asm_ dll.

Misalnya, pengidentifikasi yang benar
a, _, _1_, Sarkasme, a_long_variable, aLongVariable, var19, defaultX, char_type
tidak setia
1a, $nilai, nilai a-panjang, pendek

C adalah bahasa yang peka huruf besar-kecil. Variabel bernama a dan A, atau end dan END, atau perfectDark dan PerfectDarK adalah variabel yang berbeda.

Jenis variabel

Jenis variabel menentukan

  • 1) Ukuran variabel dalam byte (berapa byte memori yang akan dialokasikan komputer untuk menyimpan nilai)
  • 2) Representasi variabel dalam memori (bagaimana bit dalam area memori yang dialokasikan akan ditempatkan dalam bentuk biner).
Ada beberapa tipe utama di C. Mari kita bagi menjadi dua kelompok - bilangan bulat dan bilangan floating-point.

Utuh

  • arang- ukuran 1 byte. Selalu! Ini perlu diingat.
  • pendek- ukuran 2 byte
  • ke dalam- ukuran 4 byte
  • panjang- ukuran 4 byte
  • Panjang panjang- ukuran 8 byte.
Sebuah catatan harus dibuat di sini. Ukuran variabel dalam C tidak secara eksplisit didefinisikan sebagai ukuran dalam byte. Standar hanya menyatakan itu

arang<= short <= int <= long <= long long

Nilai di atas khusus untuk kompiler VC2012 pada mesin 32-bit. Jadi jika program Anda bergantung pada ukuran suatu variabel, luangkan waktu untuk mengetahui ukurannya.

Sekarang mari kita tentukan angka maksimum dan minimum yang dapat disimpan oleh setiap jenis variabel. Angka bisa positif atau negatif. Bilangan negatif menggunakan satu bit untuk menyimpan tandanya. Terkadang suatu tanda diperlukan (misalnya, kita menyimpan rekening bank, suhu, koordinat, dll.), dan terkadang tidak diperlukan (berat, ukuran array, usia seseorang, dll.). Untuk melakukan ini, C menggunakan pengubah tipe yang ditandatangani dan tidak ditandatangani. unsigned char - semuanya 8 bit untuk nomor tersebut, total kami memiliki kumpulan angka dari 00000000 hingga 11111111 dalam bentuk biner, yaitu dari 0 hingga 255 karakter bertanda dari -128 hingga 128. Di C, variabel ditandatangani secara default. Oleh karena itu, menulis char dan menandatangani char adalah setara.

tab. 1 Ukuran tipe integer dalam c.
Jenis Ukuran, byte Nilai minimal Nilai maksimum
karakter yang tidak ditandatangani 1 0 255
karakter yang ditandatangani
(arang)
1 -128 127
pendek tanpa tanda tangan 2 0 65535
ditandatangani pendek
(pendek)
2 -32768 32767
tidak ditandatangani ke dalam
(tidak ditandatangani)
4 0 4294967296
masuk ke dalam
(int)
4 -2147483648 2147483647
tidak ditandatangani panjang 4 0 4294967296
ditandatangani panjang
(panjang)
4 -2147483648 2147483647
tidak ditandatangani lama sekali 8 0 18446744073709551615
ditandatangani lama sekali
(Panjang panjang)
8 -9223372036854775808 9223372036854775807

ukuran dari

Ada operator di C yang memungkinkan Anda mendapatkan ukuran variabel dalam byte. ukuran variabel, atau ukuran (variabel) atau ukuran (tipe). Ini adalah operator karena fungsinya tidak memiliki cara untuk mendapatkan informasi ukuran tipe selama eksekusi aplikasi. Mari kita menulis sebuah program kecil untuk memeriksa ukuran variabel.

#termasuk #termasuk int main() ( char c; short s; int i; long l; long long L; //Panggil sizeof sebagai “fungsi” printf("sizeof(char) = %d\n", sizeof(c)); printf("ukuran(pendek) = %d\n", ukuranof(s)); printf("ukuran(int) = %d\n", ukuran(i)); printf("ukuran(panjang) = %d \ n", sizeof(l)); printf("sizeof(long long) = %d\n", sizeof(L)); //Panggil sebagai operator printf("sizeof(char) = %d\n", ukuran c); printf("ukuran(pendek) = %d\n", ukuran s); printf("ukuran(int) = %d\n", ukuran i); printf("ukuran(panjang) = %d \ n", ukuran l); printf("ukuran(panjang panjang) = %d\n", ukuran L); _getch(); )

(Saya pikir sudah jelas bahwa variabel dapat memiliki nama yang valid). Program ini bisa saja ditulis dengan lebih sederhana

#termasuk #termasuk int main() ( printf("sizeof(char) = %d\n", sizeof(char)); printf("sizeof(pendek) = %d\n", sizeof(pendek)); printf("sizeof( int) = %d\n", sizeof(int)); printf("sizeof(panjang) = %d\n", sizeof(panjang)); printf("sizeof(panjang panjang) = %d\n", sizeof(long long)); //Anda tidak dapat memanggil sizeof sebagai operator untuk nama tipe //sizeof int - kesalahan kompilasi _getch(); )

Di C, tipe yang sama bisa memiliki beberapa nama
pendek === int pendek
panjang === panjang ke dalam
panjang panjang === panjang panjang int
tidak ditandatangani int === tidak ditandatangani

Jenis Titik Mengambang

  • mengambang- 4 byte,
  • melayang panjang- 8 byte
  • dobel- 8 byte
  • ganda panjang- 8 byte.
Berikut juga nilai VC2012, sesuai dengan ukuran standar tipe float<= long float <= double <= long double все числа с плавающей точкой - со знаком.

Variabel meluap

C tidak memonitor variabel overflow. Ini berarti bahwa dengan terus meningkatkan nilai, katakanlah, variabel bertipe int, pada akhirnya kita akan “mereset nilainya”

#termasuk #termasuk void main() ( unsigned a = 4294967295; int b = 2147483647; //Jenis overflow yang tidak ditandatangani printf("%u\n", a); a += 1; printf("%u", a); //Overflow tipe bertanda printf("%d\n", b); b += 1; printf("%d", b); getch(); )

Secara umum, perilaku ketika variabel meluap ditentukan hanya untuk tipenya tidak ditandatangani: Integer yang tidak ditandatangani akan mengatur ulang nilainya. Untuk tipe lain, apa pun bisa terjadi, dan jika Anda perlu memperhatikan overflow, lakukan secara manual dengan memeriksa argumen, atau gunakan metode lain bergantung pada kompiler dan arsitektur prosesor.

Penunjukan tipe postfix

Saat bekerja dengan angka, Anda dapat menggunakan huruf di akhir angka untuk menunjukkan jenisnya secara eksplisit, misalnya

  • 11 - nomor int
  • 10u - tidak ditandatangani
  • 22l atau 22L - panjang
  • 3890ll atau 3890LL - panjang panjang (juga lL atau Ll)
  • 80.0f atau 80.f atau 80.0F - float (titik desimal harus ada di entri)
  • 3.0 - nomor ganda
Notasi ilmiah juga menunjukkan ganda secara default. #termasuk #termasuk int main() ( printf("sizeof(int) = %d\n", sizeof(10)); printf("sizeof(unigned) = %d\n", sizeof(10u)); printf("sizeof( panjang) = %d\n", sizeof(10l)); printf("sizeof(panjang panjang) = %d\n", sizeof(10ll)); printf("sizeof(float) = %d\n", sizeof(10.f)); printf("sizeof(ganda) = %d\n", sizeof(10.)); printf("sizeof(double) = %d\n", sizeof(10e2)); getch (); )

Namun kode berikut tidak akan menghasilkan kesalahan karena terdapat konversi tipe implisit

Int a = 10u; ganda g = 3.f;

Format heksadesimal dan oktal

Saat bekerja dengan angka, Anda dapat menggunakan format heksadesimal dan oktal. Bilangan pada sistem bilangan heksadesimal dimulai dengan 0x, pada sistem bilangan oktal dimulai dengan nol. Oleh karena itu, jika suatu bilangan dimulai dari nol, maka bilangan tersebut tidak boleh mengandung angka yang lebih tinggi dari 7:

#termasuk #termasuk void main() ( int x = 0xFF; int y = 077; printf("hex x = %x\n", x); printf("des x = %d\n", x); printf("okt x = %o\n", x); printf("okt y = %o\n", y); printf("des y = %d\n", y); printf("hex y = %x", y); getch(); )

Notasi ilmiah untuk bilangan

Bentuk eksponensial dari representasi suatu bilangan adalah representasi suatu bilangan dalam bentuk M e ± p, dimana M- mantissa nomor tersebut, P- kekuatan sepuluh. Dalam hal ini, mantissa harus memiliki satu tanda bukan nol sebelum koma desimal.
Misalnya 1.25 === 1.25e0, 123.5 === 1.235e2, 0.0002341 === 2.341e-4, dst.
Representasi 3.2435e7 setara dengan 3.2435e+7
Ada representasi lain (“teknik”), yang derajatnya harus kelipatan tiga. Misalnya 1.25 === 1.25e0, 123.5 === 123.5e0, 0.0002341 === 234.1e-6, 0.25873256 === 258.73256e-3, dst.

Mendeklarasikan Variabel

Di C, variabel selalu dideklarasikan di awal blok (blok adalah bagian kode yang dibatasi oleh kurung kurawal)

<возвращаемый тип> <имя функции> (<тип> <аргумент>[, <тип> <аргумент>]) (deklarasi variabel, yang lainnya)

Saat mendeklarasikan suatu variabel, tipe dan namanya ditulis.

Ke dalam; parameter ganda;

Anda dapat mendeklarasikan beberapa variabel bertipe sama dengan memisahkan nama-namanya dengan koma

Arg1 panjang, arg2, arg3;

Misalnya

#termasuk #termasuk int main() ( int a = 10; int b; sementara (a>0)( int z = a*a; b += z; ) )

Variabel dideklarasikan di sini A Dan B di dalam suatu fungsi utama, dan variabel z di dalam badan loop. Kode berikut akan menyebabkan kesalahan kompilasi

Ke dalam utama() ( ke dalam saya; saya = 10; ke dalam j; )

Hal ini karena deklarasi variabel muncul setelah operator penugasan. Saat mendeklarasikan variabel, Anda dapat langsung menginisialisasinya.
ke dalam saya = 0;
Namun, inisialisasi saat mendeklarasikan variabel tidak dianggap sebagai pernyataan terpisah, sehingga kode berikut akan berfungsi

Ke dalam utama() ( ke dalam saya = 10; ke dalam j; )

Nilai awal variabel

Sangat penting untuk diingat bahwa variabel dalam C tidak diinisialisasi ke nol secara default, seperti di banyak bahasa pemrograman lainnya. Setelah mendeklarasikan variabel, ia menyimpan "sampah" - nilai acak yang tersisa di area memori yang dialokasikan untuk variabel tersebut. Hal ini terutama disebabkan oleh optimalisasi program: jika tidak diperlukan inisialisasi, maka tidak perlu membuang sumber daya dengan menulis angka nol (catatan: variabel global diinisialisasi dengan angka nol, mengapa demikian, baca artikel ini) .

#termasuk #termasuk ke dalam utama() ( ke dalam saya; printf("%d", saya); getch(); )

Jika Anda menjalankan program ini di VC, peringatan akan muncul selama eksekusi
Kegagalan Pemeriksaan Run-Time #3 - Variabel "i" digunakan tanpa diinisialisasi.
Jika Anda mengklik "Lanjutkan", program akan menampilkan "sampah". Di banyak kompiler lain tidak akan ada peringatan ketika program dijalankan.

Ruang lingkup variabel

Variabel bisa bersifat lokal (dideklarasikan di dalam suatu fungsi) atau global. Variabel global dapat dilihat oleh semua fungsi yang dideklarasikan dalam file ini. Variabel lokal dibatasi oleh cakupannya. Ketika saya mengatakan bahwa suatu variabel "terlihat di suatu tempat", itu berarti bahwa di tempat itu variabel tersebut terdefinisi dan dapat digunakan. Misalnya, pertimbangkan sebuah program yang memiliki variabel global

#termasuk #termasuk int global = 100; void foo() ( printf("foo: %d\n", global); ) void bar(int global) ( printf("bar: %d\n", global); ) int main() ( foo() ; bar(333); getch(); )

Akan ditampilkan
foo: 100
batang: 333
Ini adalah variabel global global terlihat oleh semua fungsi. Namun argumen fungsi menimpa variabel global, sehingga ketika meneruskan argumen 333, nilai lokal 333 dicetak.
Berikut contoh lainnya

#termasuk #termasuk int global = 100; int utama() ( int global = 555; printf("%d\n", global); getch(); )

Program akan menghasilkan output 555. Sama seperti kasus sebelumnya, variabel lokal “lebih penting”. Misalnya, variabel yang dideklarasikan dalam lingkup tertentu tidak terlihat di luarnya

#termasuk #termasuk int global = 100; int utama() ( int x = 10; ( int y = 30; printf("%d", x); ) printf("%d", y); )

Contoh ini tidak akan dikompilasi karena variabelnya kamu hanya ada di dalam bloknya sendiri.
Berikut adalah contoh lain ketika variabel yang dideklarasikan di dalam blok saling tumpang tindih

#termasuk #termasuk int global = 100; int utama() ( int x = 10; ( int x = 20; ( int x = 30; printf("%d\n", x); ) printf("%d\n", x); ) printf( "%d\n", x); getch(); )

Program akan mencetak
30
20
10
Variabel global harus dihindari. Anda sering mendengarnya. Mari kita coba mencari tahu alasannya. Dalam proyek sederhana Anda, variabel global terlihat normal. Tapi bayangkan Anda memiliki aplikasi itu

  • 1) Dikembangkan oleh beberapa orang dan terdiri dari ratusan ribu baris kode
  • 2) Bekerja di banyak thread

Pertama, variabel global, jika dapat dilihat oleh semua orang, dapat diubah oleh bagian mana pun dari program. Anda mengubah variabel global, ingin menulisnya, dan bagian lain dari program telah menimpanya dengan nilai lain (sebenarnya, ini adalah seluruh kelas masalah yang muncul di lingkungan multi-thread). Kedua, dengan ukuran proyek yang besar, tidak mungkin melacak siapa yang membuat variabel global dan kapan. Contoh di atas menunjukkan bagaimana variabel dapat saling tumpang tindih, dan hal yang sama akan terjadi dalam proyek besar.

Tentu saja ada situasi di mana variabel global menyederhanakan suatu program, tetapi situasi ini tidak sering terjadi dan tidak akan terjadi dalam pekerjaan rumah Anda, jadi JANGAN MEMBUAT VARIABEL GLOBAL!
Variabel tidak hanya bisa berupa integer dan floating point. Masih banyak jenis lainnya yang akan kita pelajari lebih lanjut.

Bagian ini akan membahas tipe data utama dalam C++; tipe data ini disebut juga built-in. Bahasa pemrograman C++ adalah bahasa pemrograman yang dapat diperluas. Istilah yang dapat diperluas berarti bahwa selain tipe data bawaan, Anda dapat membuat tipe data Anda sendiri. Itu sebabnya ada banyak sekali tipe data di C++. Kami hanya akan mempelajari yang utama saja.

Tabel 1 - Tipe data C++
Jenis byte Rentang nilai yang diterima

tipe data bilangan bulat (Boolean).

bodoh 1 0 / 255

tipe data integer (karakter).

arang 1 0 / 255

tipe data bilangan bulat

int pendek 2 -32 768 / 32 767
unsigned int pendek 2 0 / 65 535
ke dalam 4
tidak ditandatangani ke dalam 4 0 / 4 294 967 295
panjang ke dalam 4 -2 147 483 648 / 2 147 483 647
tidak ditandatangani int panjang 4 0 / 4 294 967 295

tipe data titik mengambang

mengambang 4 -2 147 483 648.0 / 2 147 483 647.0
melayang panjang 8
dobel 8 -9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0

Tabel 1 menunjukkan tipe data utama di C++. Seluruh tabel dibagi menjadi tiga kolom. Kolom pertama menunjukkan kata yang dicadangkan, yang akan menentukan tipe data masing-masing. Kolom kedua menunjukkan jumlah byte yang dialokasikan untuk variabel dengan tipe data yang sesuai. Kolom ketiga menunjukkan kisaran nilai yang dapat diterima. Perlu diketahui bahwa pada tabel semua tipe data diurutkan dari yang terkecil hingga yang terbesar.

tipe data bool

Yang pertama dalam tabel adalah tipe data bool tipe data integer, karena rentang nilai yang valid adalah bilangan bulat dari 0 hingga 255. Namun seperti yang telah Anda perhatikan, dalam tanda kurung tertulis tipe data logis, dan ini juga benar. Karena bodoh digunakan secara eksklusif untuk menyimpan hasil ekspresi Boolean. Ekspresi Boolean dapat mempunyai salah satu dari dua hasil: benar atau salah. benar - jika ekspresi logikanya benar, salah - jika ekspresi logikanya salah.

Tetapi karena rentang nilai valid dari tipe data bool adalah dari 0 hingga 255, rentang ini perlu dicocokkan dengan konstanta logika true dan false yang ditentukan dalam bahasa pemrograman. Jadi, konstanta true setara dengan semua bilangan dari 1 hingga 255 inklusif, sedangkan konstanta false setara dengan hanya satu bilangan bulat - 0. Pertimbangkan sebuah program yang menggunakan tipe data bool.

// data_type.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk menggunakan namespace std; int main(int argc, char* argv) ( bool boolean = 25; // variabel bertipe bool bernama boolean if (boolean) // kondisi operator if cout<< "true = " << boolean << endl; // выполнится в случае истинности условия else cout << "false = " << boolean << endl; // выполнится в случае, если условие ложно system("pause"); return 0; }

DI DALAM baris 9tipe variabel dideklarasikan bodoh , yang diinisialisasi ke 25. Secara teoritis, setelahbaris 9, dalam variabel boolean seharusnya berisi angka 25, namun nyatanya variabel ini berisi angka 1. Seperti yang saya katakan, angka 0 adalah nilai salah, angka 1 adalah nilai sebenarnya. Intinya di variabel like bodoh dapat berisi dua nilai - 0 (salah) atau 1 (benar). Sedangkan pada tipe data bodoh seluruh byte dialokasikan, yang berarti variabel bertipe bodoh dapat berisi angka dari 0 hingga 255. Untuk menentukan nilai salah dan benar, hanya diperlukan dua nilai 0 dan 1. Timbul pertanyaan: “Untuk apa 253 nilai lainnya?”

Berdasarkan situasi ini, kami sepakat untuk menggunakan angka dari 2 hingga 255 sebagai padanan dari angka 1, yaitu kebenaran. Inilah sebabnya mengapa variabel boolean berisi angka 25 dan bukan 1. In baris 10 -13 dideklarasikan, yang mengalihkan kendali kepada operator di baris 11, jika kondisinya benar, dan operator masuk baris 13, jika kondisinya salah. Hasil program ditunjukkan pada Gambar 1.

Benar = 1 Untuk melanjutkan, tekan tombol apa saja. . .

Gambar 1 - tipe data bool

Tipe data karakter

Tipe data char adalah tipe data integer yang digunakan untuk mewakili karakter. Artinya, setiap karakter berhubungan dengan nomor tertentu dari rentang tersebut. Tipe data char juga disebut tipe data karakter, karena representasi grafis karakter dalam C++ dimungkinkan berkat char. Untuk merepresentasikan karakter dalam C++, tipe data char dialokasikan satu byte, satu byte berisi 8 bit, lalu kita naikkan dua ke pangkat 8 dan mendapatkan nilai 256 - jumlah karakter yang dapat dikodekan. Jadi, dengan menggunakan tipe data char, Anda dapat menampilkan 256 karakter mana pun. Semua karakter yang dikodekan diwakili dalam .

ASCII (dari Kode Standar Bahasa Inggris untuk Pertukaran Informasi) - Kode standar Amerika untuk pertukaran informasi.

Pertimbangkan sebuah program menggunakan tipe data char.

// simbol.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk menggunakan namespace std; int main(int argc, char* argv) ( char simbol = "a"; // mendeklarasikan variabel bertipe char dan menginisialisasinya dengan simbol "a" cout<< "symbol = " << symbol << endl; // печать символа, содержащегося в переменной symbol char string = "сайт"; // объявление символьного массива (строки) cout << "string = " << string << endl; // печать строки system("pause"); return 0; }

Jadi, di baris 9sebuah variabel bernama simbol , itu diberi nilai simbol"A" ( kode ASCII). DI DALAM baris 10 operator cout mencetak karakter yang terkandung dalam variabel simbol DI DALAM baris 11mendeklarasikan array string dengan nama rangkaian , dan ukuran array ditentukan secara implisit. Sebuah string disimpan dalam array string"situs web" . Perlu diketahui bahwa ketika kita menyimpan simbol ke dalam variabel seperti arang , lalu setelah tanda sama dengan kita beri tanda kutip tunggal yang kita tulis simbolnya. Saat menginisialisasi array string dengan string tertentu, tanda kutip ganda ditempatkan setelah tanda sama dengan, di mana string tertentu ditulis. Seperti karakter biasa, string dikeluarkan menggunakan operator menghitung , baris 12. Hasil program ditunjukkan pada Gambar 2.

Simbol = string = situs Untuk melanjutkan, tekan tombol apa saja. . .

Gambar 2 - tipe data char

Tipe data bilangan bulat

Tipe data integer digunakan untuk merepresentasikan angka. Ada enam di antaranya di Tabel 1: short int, unsigned short int, int, unsigned int, long int, unsigned long int . Semuanya memiliki ukuran memori dan rentang nilai yang diterima. Tergantung pada kompilernya, ukuran memori yang digunakan dan kisaran nilai yang diterima mungkin berbeda. Pada Tabel 1, semua rentang nilai yang diterima dan ukuran memori yang ditempati diambil untuk kompiler MVS2010. Selain itu, semua tipe data pada Tabel 1 disusun dalam urutan peningkatan ukuran memori yang digunakan dan rentang nilai yang diterima. Kisaran nilai yang diterima, dengan satu atau lain cara, bergantung pada ukuran memori yang ditempati. Oleh karena itu, semakin besar ukuran memori yang ditempati, semakin besar pula rentang nilai yang diterima. Selain itu, rentang nilai yang diterima berubah jika tipe data dideklarasikan dengan awalan unsigned. Awalan unsigned berarti tipe data tidak dapat menyimpan nilai yang ditandatangani, maka rentang nilai positif menjadi dua kali lipat, misalnya tipe data short int dan unsigned short int.

Awalan tipe data integer:

pendek awalan memperpendek tipe data yang diterapkan dengan mengurangi ukuran memori yang ditempati;

panjang awalan memperluas tipe data yang diterapkan dengan meningkatkan ukuran memori yang ditempati;

unsigned—awalan menggandakan rentang nilai positif, sedangkan rentang nilai negatif tidak dapat disimpan dalam tipe data ini.

Jadi, pada dasarnya, kita memiliki satu tipe integer untuk mewakili integer: tipe data int. Berkat awalan short, long, unsigned, variasi tipe data int tertentu muncul, berbeda dalam ukuran memori yang digunakan dan (atau) rentang nilai yang diterima.

Tipe Data Titik Mengambang

Ada dua jenis data floating point di C++: float dan double. Tipe data floating point dirancang untuk menyimpan angka floating point. Tipe data float dan double dapat menyimpan bilangan floating point positif dan negatif. Tipe data float memiliki setengah jejak memori dari tipe data double, yang berarti rentang nilai yang diterima juga lebih kecil. Jika tipe data float dideklarasikan dengan awalan panjang, maka rentang nilai yang diterima akan sama dengan rentang nilai yang diterima dari tipe data ganda. Pada dasarnya tipe data floating point diperlukan untuk menyelesaikan masalah dengan presisi komputasi tinggi, seperti transaksi uang.

Jadi, kita telah melihat poin utama mengenai tipe data utama di C++. Yang tersisa hanyalah menunjukkan dari mana semua rentang nilai yang diterima dan ukuran memori yang ditempati ini berasal. Dan untuk ini kami akan mengembangkan sebuah program yang akan menghitung karakteristik utama dari semua jenis data yang dibahas di atas.

// data_types.cpp: Mendefinisikan titik masuk untuk aplikasi konsol. #termasuk "stdafx.h" #termasuk // Pustaka manipulasi I/O #include // file header fungsi matematika #include menggunakan namespace std; int main(int argc, char* argv) ( cout<< " data type " << "byte" << " " << " max value "<< endl // header kolom <<"bool = " << sizeof(bool) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных bool*/ << (pow(2,sizeof(bool) * 8.0) - 1) << endl << "char = " << sizeof(char) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных char*/ << (pow(2,sizeof(char) * 8.0) - 1) << endl << "short int = " << sizeof(short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных short int*/ << (pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl << "unsigned short int = " << sizeof(unsigned short int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned short int*/ << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl << "int = " << sizeof(int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных int*/ << (pow(2,sizeof(int) * 8.0 - 1) - 1) << endl << "unsigned int = " << sizeof(unsigned int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных unsigned int*/ << (pow(2,sizeof(unsigned int) * 8.0) - 1) << endl << "long int = " << sizeof(long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных long int*/ << (pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl << "unsigned long int = " << sizeof(unsigned long int) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных undigned long int*/ << (pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl << "float = " << sizeof(float) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных float*/ << (pow(2,sizeof(float) * 8.0 - 1) - 1) << endl << "double = " << sizeof(double) << " " << fixed << setprecision(2) /*вычисляем максимальное значение для типа данных double*/ << (pow(2,sizeof(double) * 8.0 - 1) - 1) << endl; system("pause"); return 0; }

Program ini diposting agar Anda dapat melihat karakteristik tipe data di sistem Anda. Tidak perlu memahami kodenya, karena program ini menggunakan pernyataan kontrol yang kemungkinan besar belum Anda pahami. Untuk pengenalan sekilas dengan kode program, saya akan menjelaskan beberapa poin di bawah ini. Operator ukuran dari() Menghitung jumlah byte yang dialokasikan untuk tipe data atau variabel. Fungsi kekuatan(x,y) mengangkat makna x pangkat y , fungsi ini tersedia dari file header . manipulator tetap dan setprecision() tersedia dari file header . Yang pertama sudah diperbaiki , meneruskan nilai dalam bentuk tetap ke aliran keluaran. Manipulator setprecision(n) menampilkan n tempat desimal. Nilai maksimum tipe data tertentu dihitung menggunakan rumus berikut:

Tipe_val_maks = 2^(b * 8 - 1) - 1; // untuk tipe data dengan angka negatif dan positif // dimana b adalah jumlah byte yang dialokasikan dalam memori untuk variabel dengan tipe data ini // kalikan dengan 8, karena ada 8 bit dalam satu byte // kurangi 1 dalam tanda kurung, karena rentang angka harus dibagi dua untuk nilai positif dan negatif // kurangi 1 di akhir, karena rentang angka dimulai dari nol // tipe data dengan awalan unsigned max_val_type = 2^(b * 8) - 1; // untuk tipe data hanya bilangan positif // penjelasan rumusnya sama, hanya satuannya tidak dikurangkan dari tanda kurung

Contoh cara kerja program dapat dilihat pada Gambar 3. Kolom pertama menunjukkan tipe data utama pada C++, kolom kedua menunjukkan ukuran memori yang dialokasikan untuk setiap tipe data, dan kolom ketiga menunjukkan nilai maksimum yang sesuai. tipe data dapat berisi. Nilai minimum ditemukan serupa dengan nilai maksimum. Untuk tipe data dengan awalan unsigned, nilai minimumnya adalah 0.

Tipe data byte nilai maks bool = 1 255.00 char = 1 255.00 short int = 2 32767.00 unsigned short int = 2 65535.00 int = 4 2147483647.00 unsigned int = 4 4294967295.00 long int = 4 2147483647.0 0 unsigned int panjang = 4 4294967295.00 float = 4 2147483647.00 double = 8 9223372036854775808.00 Untuk melanjutkan, tekan tombol apa saja. . .

Gambar 3 - Tipe data C++

Jika, misalnya, variabel bertipe short int diberi nilai 33000, maka bit grid akan meluap, karena nilai maksimum dalam variabel bertipe short int adalah 32767. Artinya, beberapa nilai lain akan disimpan dalam variabel bertipe short int, kemungkinan besar akan negatif. Karena kita telah menyentuh tipe data int, perlu dicatat bahwa Anda dapat menghilangkan kata kunci int dan menulis, misalnya, short saja. Kompiler akan menafsirkan entri seperti int pendek. Hal yang sama berlaku untuk awalan yang panjang dan tidak bertanda tangan. Misalnya:

// singkatan dari tipe data int short a1; // sama dengan short int long a1; // sama dengan long int unsigned a1; // sama seperti unsigned int unsigned short a1; // sama dengan int pendek yang tidak ditandatangani

Pilihan Editor
Dalam kasus radang pankreas, yaitu pankreatitis, pembatasan diet tertentu harus dipatuhi. Ini satu-satunya jalan...

Mulai usia sekolah, anak harus menghabiskan waktu yang cukup lama dengan duduk di depan meja. Otot punggung lemah...

Kadang-kadang cukup sulit untuk membedakan antara penyebab alami perdarahan yang normal dan yang disebabkan oleh penyakit dan kelainan...

Helicobacter Pylori Anda dapat terinfeksi bakteri ini dengan melanggar standar kebersihan pribadi, makan sayuran yang tidak dicuci, atau melalui metode rumah tangga...
25 tahun yang lalu, para ilmuwan membuat penemuan yang sensasional. Ternyata penyakit pada saluran cerna seperti maag,...
Keputihan pada wanita merupakan hal yang normal. Mereka adalah konsekuensi dari aktivitas sekresi serviks dan vagina. Normal...
Semua orang sudah mengenal bumbu yang ditambahkan saat memasak sebagai bumbu penyedap ini sejak kecil. Dari yang sudah disiapkan...
Khasiat lidah buaya yang dikenal juga dengan nama agave telah dikenal sejak zaman dahulu kala. Tanaman ini dapat digunakan sebagai obat topikal...
Mungkin setiap orang setidaknya sekali dalam hidupnya pernah mengalami masalah umum seperti munculnya bintik-bintik merah di tubuh. Ini...