Variabel. Berapa berat tipe data? Variabel pendek

Saat menulis program dalam bahasa apa pun, Anda perlu menggunakan variabel berbeda untuk menyimpan informasi berbeda. Variabel tidak lain hanyalah lokasi memori yang dicadangkan untuk menyimpan nilai. Artinya saat Anda membuat variabel, Anda menghemat sejumlah ruang di memori.

Anda dapat menyimpan informasi dari berbagai tipe data seperti karakter, karakter lebar, integer, floating point, double floating point, boolean, dll. Berdasarkan tipe data variabel, sistem operasi mengalokasikan memori dan memutuskan apa yang dapat disimpan dalam memori yang dicadangkan.

Tipe bawaan primitif

C++ menawarkan kepada pemrogram serangkaian tipe data bawaan dan yang ditentukan pengguna. Tabel berikut mencantumkan tujuh tipe data utama C++:

Jenis Kata kunci
Boolean bodoh
Karakter arang
Bilangan bulat ke dalam
Titik mengambang mengambang
Titik mengambang ganda dobel
Tidak berharga ruang kosong
Karakter yang luas wchar_t

Beberapa tipe dasar dapat dimodifikasi menggunakan satu atau lebih pengubah tipe ini:

  • tertanda
  • tidak ditandatangani
  • pendek

Tabel berikut menunjukkan jenis variabel, jumlah memori yang diperlukan untuk menyimpan nilai dalam memori, dan berapa nilai maksimum dan minimum yang dapat disimpan dalam variabel tersebut.

Jenis Lebar Bit Khas Kisaran Khas
arang 1bita -127 hingga 127 atau 0 hingga 255
karakter yang tidak ditandatangani 1bita 0 hingga 255
karakter yang ditandatangani 1bita -127 hingga 127
ke dalam 4byte -2147483648 hingga 2147483647
tidak ditandatangani ke dalam 4byte 0 hingga 4294967295
masuk ke dalam 4byte -2147483648 hingga 2147483647
int pendek 2byte -32768 hingga 32767
unsigned int pendek Jangkauan 0 hingga 65.535
menandatangani int pendek Jangkauan -32768 hingga 32767
panjang ke dalam 4byte -2.147.483.648 hingga 2.147.483.647
ditandatangani panjang in 4byte sama dengan int panjang
tidak ditandatangani int panjang 4byte 0 hingga 4.294.967.295
mengambang 4byte +/- 3.4e +/- 38 (~7 digit)
dobel 8byte
ganda panjang 8byte +/- 1.7e +/- 308 (~15 digit)
wchar_t 2 atau 4 byte 1 karakter lebar

Ukuran variabel mungkin berbeda dari ukuran yang ditunjukkan pada tabel di atas, bergantung pada compiler dan komputer yang Anda gunakan. Di bawah ini adalah contoh yang akan memberikan ukuran yang benar dari berbagai tipe data di komputer Anda.

#termasuk menggunakan namespace std; int utama() ( cout<< "Size of char: " << sizeof(char) << endl; cout << "Size of int: " << sizeof(int) << endl; cout << "Size of short int: " << sizeof(short int) << endl; cout << "Size of long int: " << sizeof(long int) << endl; cout << "Size of float: " << sizeof(float) << endl; cout << "Size of double: " << sizeof(double) << endl; cout << "Size of wchar_t: " << sizeof(wchar_t) << endl; return 0; }

Contoh ini menggunakan akhir yang memperkenalkan karakter baris baru setelah setiap baris, dan operator<< используется для передачи нескольких значений на экран. Мы также используем оператор ukuran dari() untuk mendapatkan ukuran berbagai tipe data.

Ketika kode di atas dikompilasi dan dijalankan, ia menghasilkan output berikut, yang mungkin berbeda dari satu mesin ke mesin lainnya:

Ukuran char : 1 Ukuran int : 4 Ukuran int pendek : 2 Ukuran int panjang : 4 Ukuran float : 4 Ukuran double : 8 Ukuran wchar_t : 4

Deklarasi Typedef

Anda dapat membuat nama baru untuk tipe yang sudah ada menggunakan typedef. Di bawah ini adalah sintaks sederhana untuk mendefinisikan tipe baru menggunakan typedef:

Typedef ketik nama baru;

Misalnya, perintah berikut memberitahu kompiler bahwa kaki adalah nama lain dari int:

Typedef int kaki;

Sekarang deklarasi berikut ini sah dan menciptakan variabel integer yang disebut jarak:

Jarak kaki

Jenis terdaftar

Tipe yang disebutkan mendeklarasikan nama tipe opsional dan sekumpulan nol atau lebih pengidentifikasi yang dapat digunakan sebagai nilai tipe tersebut. Setiap enumerator adalah konstanta yang tipenya adalah enumerasi. Membuat enumerasi memerlukan penggunaan kata kunci enum. Tampilan umum dari tipe enumerasi:

Enum enum-nama ( daftar nama ) var-list;

Di sini nama enum adalah nama tipe enum. Daftar nama dipisahkan dengan koma. Misalnya, kode berikut mendefinisikan enumerasi warna yang disebut warna dan variabel c bertipe warna. Terakhir, c diberi nilai "biru".

Warna enum ( merah, hijau, biru ) c; c = biru;

Secara default, nama depan memiliki nilai 0, nama kedua memiliki nilai 1, dan nama ketiga memiliki nilai 2, dan seterusnya. Namun Anda dapat membuat nama memiliki nilai tertentu dengan menambahkan penginisialisasi. Misalnya, pada pencacahan berikut, warna hijau akan bernilai 5.

Warna enum (merah, hijau = 5, biru);

Disini warna biru akan bernilai 6 karena setiap nama akan lebih besar dari yang sebelumnya.

Dalam pelajaran ini kita akan melihat tipe data integer, rentang nilainya, pembagian, dan overflow: apa itu tipe data integer dan contohnya.

Tipe data bilangan bulat

Tipe data bilangan bulat adalah tipe yang variabelnya hanya boleh berisi bilangan bulat (tanpa bagian pecahan, contoh: -2, -1, 0, 1, 2). Di C++ ada lima tipe integer dasar yang tersedia untuk digunakan:

Catatan: Tipe char adalah kasus khusus, yaitu tipe data integer dan karakter. Kita akan membicarakan hal ini secara lebih rinci dalam salah satu pelajaran berikut.

Perbedaan utama antara tipe integer di atas adalah semakin besar ukurannya, semakin banyak nilai yang dapat disimpan oleh variabel tipe tersebut.

Mendefinisikan Variabel Integer

Hal ini terjadi sebagai berikut:

karakter c; int pendek si; // s pendek yang valid; //lebih disukai int i; panjang ke dalam li; // valid panjang l; // sebaiknya long long int lli; // valid panjang panjang ll; // lebih baik

Meskipun nama lengkap short int , long int , dan long long int dapat digunakan, versi singkatnya (tanpa int) lebih disukai untuk digunakan. Selain itu, penambahan int secara terus-menerus membuat kode sulit dibaca (mudah tertukar dengan variabel).

Rentang nilai dan tanda tipe data integer

Seperti yang telah Anda ketahui dari pelajaran sebelumnya, sebuah variabel dengan jumlah n bit dapat menyimpan 2n nilai yang mungkin. Tapi apa arti semua ini? Mereka yang berada dalam jangkauan. Jangkauan- ini adalah nilai dari dan ke yang dapat disimpan oleh tipe data tertentu. Kisaran variabel integer ditentukan oleh dua faktor: ukurannya (dalam bit) dan ukurannya tanda(yang mungkin tertanda atau tidak ditandatangani).

Tipe integer ditandatangani (dengan sebuah tanda) artinya variabel tersebut dapat memuat bilangan positif dan negatif. Untuk mendeklarasikan variabel sebagai ditandatangani, gunakan kata kunci yang ditandatangani:

tanda tangan karakter c; ditandatangani s pendek; masuk ke saya; ditandatangani panjang l; ditandatangani panjang panjang ll;

menandatangani karakter c;

ditandatangani pendek s ;

masuk ke saya;

ditandatangani panjang l ;

ditandatangani panjang panjang ll;

Secara default, kata kunci yang ditandatangani ditulis sebelum tipe data.

Variabel bilangan bulat bertanda 1 byte memiliki rentang nilai dari -128 hingga 127. Nilai apa pun dari -128 hingga 127 (inklusif) dapat disimpan dengan aman di dalamnya.

Dalam beberapa kasus, kita dapat mengetahui sebelumnya bahwa angka negatif tidak akan digunakan dalam program. Hal ini sangat umum terjadi ketika menggunakan variabel untuk menyimpan jumlah atau ukuran sesuatu (misalnya, tinggi atau berat badan Anda tidak boleh negatif).

Tipe bilangan bulat tidak ditandatangani (tidak ditandatangani) hanya dapat berisi bilangan positif. Untuk mendeklarasikan variabel sebagai tidak ditandatangani, gunakan kata kunci unsigned:

karakter c yang tidak ditandatangani; s pendek yang tidak ditandatangani; tidak ditandatangani ke dalam saya; tidak ditandatangani panjang l; tidak ditandatangani panjang panjang ll;

karakter c yang tidak ditandatangani;

s pendek yang tidak ditandatangani;

tidak ditandatangani ke dalam saya;

tidak ditandatangani panjang l ;

tidak ditandatangani panjang panjang ll ;

Variabel bilangan bulat tak bertanda 1 byte memiliki rentang nilai dari 0 hingga 255.

Harap dicatat bahwa mendeklarasikan variabel sebagai unsigned berarti variabel tersebut tidak boleh berisi angka negatif (hanya angka positif).

Sekarang setelah Anda memahami perbedaan antara yang ditandatangani dan tidak ditandatangani, mari kita lihat rentang nilai dari tipe data yang berbeda:

Tipe ukuran Jarak nilai
1 byte ditandatangani -128 hingga 127
1 byte tidak ditandatangani dari 0 hingga 255
2 byte ditandatangani dari -32.768 menjadi 32.767
2 byte tidak ditandatangani dari 0 hingga 65535
4 byte ditandatangani dari -2 147 483 648 hingga 2 147 483 647
4 byte tidak ditandatangani dari 0 hingga 4 294 967 295
8 byte ditandatangani dari -9 223 372 036 854 775 808 hingga 9 223 372 036 854 775 807
8 byte tidak ditandatangani dari 0 hingga 18 446 744 073 709 551 615

Untuk ahli matematika: Variabel bertanda dengan jumlah bit ke-n memiliki rentang dari -(2 n-1) hingga 2 n-1 -1. Variabel unsigned dengan jumlah bit ke-n memiliki rentang dari 0 hingga (2n)-1. Untuk non-matematika: gunakan tabel :)

Pemrogram pemula terkadang bingung antara variabel yang ditandatangani dan tidak ditandatangani. Namun ada cara mudah untuk mengingat perbedaannya. Apa perbedaan antara bilangan negatif dan bilangan positif? Benar! Minusnya di depan. Jika tidak ada minus, maka bilangan tersebut positif. Oleh karena itu, tipe bilangan bulat bertanda berarti ada tanda minus, yaitu. angka bisa positif atau negatif. Tipe integer unsigned berarti tanda minus di depannya sama sekali tidak ada, mis. angka hanya bisa positif.

Apa defaultnya: ditandatangani atau tidak?

Lalu apa jadinya jika kita mendeklarasikan suatu variabel tanpa tanda tangan atau tidak tanda tangan?

Semua tipe data integer kecuali char ditandatangani secara default. Tipe char dapat ditandatangani atau tidak ditandatangani (tetapi biasanya ditandatangani).

Dalam kebanyakan kasus, kata kunci yang ditandatangani tidak ditulis (sudah digunakan secara default), dengan pengecualian tipe char (lebih baik dijelaskan di sini).

Pemrogram cenderung menghindari penggunaan tipe bilangan bulat tak bertanda kecuali jika ada kebutuhan khusus untuk itu, karena menurut statistik, lebih banyak kesalahan terjadi pada variabel tak bertanda dibandingkan dengan variabel bertanda.

Aturan: Gunakan tipe bilangan bulat bertanda alih-alih tidak ditandatangani.

Meluap

Pertanyaan: “Apa yang terjadi jika kita mencoba menggunakan nilai yang berada di luar rentang nilai tipe data tertentu?” Jawaban: "Meluap".

Meluap(Bahasa inggris) "meluap") terjadi ketika bit hilang karena variabel tidak diberi cukup memori untuk menyimpannya.

Contoh luapan

Pertimbangkan variabel unsigned, yang terdiri dari 4 bit. Bilangan biner apa pun yang tercantum dalam tabel di atas akan masuk ke dalam variabel ini.

“Tetapi apa yang terjadi jika kita mencoba memberikan nilai yang membutuhkan lebih dari 4 bit?” Benar! Meluap. Variabel kita hanya akan menyimpan 4 bit paling tidak signifikan (di sebelah kanan), sisanya akan hilang.

Misalnya, jika kita mencoba memasukkan angka 21 ke dalam variabel 4-bit kita:

Sistem desimal Sistem biner
21 10101

Angka 21 membutuhkan 5 bit (10101). 4 bit di sebelah kanan (0101) akan masuk ke dalam variabel, dan bit paling kiri (1) akan hilang begitu saja. Itu. variabel kita akan berisi 0101, yang sama dengan 101 (nol di depan tidak dihitung), dan ini sudah menjadi angka 5, bukan 21.

Catatan: Akan ada pelajaran tersendiri tentang mengubah bilangan dari biner ke desimal dan sebaliknya, dimana kita akan membahas dan membahas semuanya secara detail.

Sekarang mari kita lihat contoh kode (tipe pendek membutuhkan 16 bit):

#termasuk int main() ( unsigned short x = 65535; // nilai terbesar yang dapat disimpan oleh variabel 16-bit unsigned std::cout<< "x was: " << x << std::endl; x = x + 1; // 65536 - это число больше максимально допустимого числа из диапазона допустимых значений. Следовательно, произойдёт переполнение, так как переменнная x не может хранить 17 бит std::cout << "x is now: " << x << std::endl; return 0; }

#termasuk

ke dalam utama()

tidak bertanda tangan pendek x = 65535 ; // nilai terbesar yang dapat disimpan oleh variabel unsigned 16-bit

std::cout<< "x was: " << x << std :: endl ;

x = x + 1 ; // 65536 adalah angka yang lebih besar dari angka maksimum yang diperbolehkan dari rentang nilai yang valid. Oleh karena itu, akan terjadi overflow karena variabel x tidak dapat menyimpan 17 bit

std::cout<< "x is now: " << x << std :: endl ;

kembali 0;

x adalah: 65535
x sekarang: 0

Apa yang terjadi? Terjadi overflow karena kami mencoba menjejalkan sesuatu yang tidak dapat dimasukkan ke dalam variabel x.

Bagi yang ingin tahu lebih banyak: Angka 65535 dalam biner direpresentasikan sebagai 1111 1111 1111 1111. 65535 adalah angka terbesar yang dapat disimpan oleh variabel integer tak bertanda 2-byte (16-bit) karena menggunakan seluruh 16 bit. Ketika kita menambahkan 1, kita mendapatkan angka 65536. Angka 65536 direpresentasikan dalam biner sebagai 1 0000 0000 0000 0000, dan membutuhkan 17 bit! Oleh karena itu, bit terpenting (yaitu 1) hilang, dan 16 bit di sebelah kanan dipertahankan. Kombinasi 0000 0000 0000 0000 sesuai dengan desimal 0, yang merupakan hasil kami.

Demikian pula, kita akan mendapatkan overflow dengan menggunakan angka yang kurang dari rentang nilai minimum yang valid:

#termasuk int main() ( unsigned short x = 0; // nilai terkecil yang dapat disimpan oleh variabel unsigned berukuran 2 byte std::cout<< "x was: " << x << std::endl; x = x - 1; // переполнение! std::cout << "x is now: " << x << std::endl; return 0; }

#termasuk

ke dalam utama()

tidak bertanda tangan pendek x = 0; // nilai terkecil yang dapat disimpan oleh variabel unsigned berukuran 2 byte

std::cout<< "x was: " << x << std :: endl ;

x = x - 1 ; // meluap!

std::cout<< "x is now: " << x << std :: endl ;

kembali 0;

Hasil menjalankan program di atas:

x adalah: 0
x sekarang: 65535

Meluapnya menyebabkan hilangnya informasi, dan ini bukanlah hal yang baik. Jika ada kecurigaan atau dugaan sekecil apa pun bahwa nilai suatu variabel mungkin merupakan angka yang berada di luar rentang nilai yang diperbolehkan dari tipe data yang digunakan, gunakan tipe data yang lebih besar!

Cheat sheet ini memberikan informasi tentang tipe data utama bahasa pemrograman C++ dan fitur implementasinya. Selain itu, di akhir record terdapat tabel dengan rentang nilai tipe ini.

Konsep Tipe Data

Tujuan utama dari program apa pun adalah untuk memproses data. Berbagai jenis data disimpan dan diproses secara berbeda. Dalam bahasa algoritmik apa pun, setiap konstanta, variabel, ekspresi, atau fungsi harus memiliki tipe tertentu.

Tipe data mendefinisikan:

  • representasi internal data dalam memori komputer;
  • himpunan nilai yang dapat diambil oleh besaran jenis ini;
  • operasi dan fungsi yang dapat diterapkan pada besaran jenis ini.

Berdasarkan karakteristik tersebut, pemrogram memilih jenis setiap besaran yang digunakan dalam program untuk mewakili objek nyata. Deklarasi tipe yang diperlukan memungkinkan kompiler memeriksa validitas berbagai konstruksi program. Jenis nilai menentukan instruksi mesin yang akan digunakan untuk memproses data.

Semua jenis bahasa C++ dapat dibagi menjadi dasar Dan gabungan . Bahasa C++ mendefinisikan enam utama tipe data untuk mewakili nilai integer, real, karakter dan logika. Berdasarkan tipe ini, programmer dapat memasukkan deskripsi gabungan jenis. Ini termasuk array, enumerasi, fungsi, struktur, referensi, pointer, gabungan, dan kelas.

Tipe data dasar di C++

Tipe data dasar (standar) sering disebut aritmatika karena dapat digunakan dalam operasi aritmatika. Untuk menggambarkan tipe utama, berikut ini didefinisikan:

  1. ke dalam(ke dalam);
  2. arang(arang);
  3. wchar_t(widechar);
  4. bodoh(boolean);
  5. mengapung (nyata);
  6. ganda (presisi ganda nyata).

Empat tipe pertama disebut integer ( utuh ), dua yang terakhir - jenis titik mengambang . Kode yang dihasilkan kompiler untuk menangani nilai integer berbeda dengan kode untuk nilai floating-point.

Ada empat penentu tipe , memperjelas representasi internal dan rentang nilai tipe standar:

  • pendek (pendek);
  • Panjang panjang);
  • ditandatangani(ditandatangani);
  • tidak ditandatangani.

Tipe bilangan bulat (int)

Ukuran tipe int tidak ditentukan oleh standar, tetapi bergantung pada komputer dan compiler. Untuk prosesor 16-bit, 2 byte dialokasikan untuk nilai jenis ini, untuk prosesor 32-bit - 4 byte.

Penentu singkat sebelum nama tipe menunjukkan kepada kompiler bahwa 2 byte harus dialokasikan untuk nomor tersebut, terlepas dari kapasitas prosesor. Penentu panjang berarti nilai integer akan menempati 4 byte. Jadi pada komputer 16-bit padanannya adalah int dan short int, dan pada komputer 32-bit padanannya adalah int dan long int.

Representasi internal nilai tipe integer - bilangan bulat dalam kode biner. Saat menggunakan penentu bertanda, bit paling signifikan dari angka tersebut ditafsirkan sebagai bertanda (0 adalah angka positif, 1 adalah angka negatif). Penentu unsigned hanya memperbolehkan bilangan positif untuk direpresentasikan, karena bit paling signifikan diperlakukan sebagai bagian dari kode bilangan tersebut. Jadi, rentang nilai tipe 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" di akhir entri.

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 pemrogram tidak puas dengan tipe ini, ia dapat secara eksplisit menunjukkan tipe yang diperlukan menggunakan sufiks L, l (panjang) 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 yang tidak melebihi batas rentang yang ditentukan.

Tipe karakter yang diperluas (wchar_t)

Tipe 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, ini sesuai dengan tipe pendek. Konstanta string bertipe wchar_t ditulis dengan awalan L, misalnya L»Gerbang».

Tipe Boolean (bool)

Nilai Boolean hanya dapat mengambil nilai benar dan salah, yang merupakan kata-kata yang dicadangkan. Bentuk internal yang merepresentasikan nilai false adalah 0 (nol). Nilai lainnya ditafsirkan sebagai benar. Ketika dikonversi ke tipe integer, true 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 komputer dibandingkan tipe data integer. Representasi internal bilangan real terdiri dari dua bagian - mantissa dan eksponen. Pada komputer yang kompatibel dengan IBM PC, nilai float menempati 4 byte, di mana satu digit biner dialokasikan untuk tanda mantissa, 8 bit untuk eksponen, dan 23 bit untuk 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 nilai ganda yang menempati 8 byte, masing-masing 11 dan 52 bit dialokasikan untuk eksponen 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 ganda 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.

Untuk menulis program yang portabel lintas platform, Anda tidak dapat membuat asumsi tentang ukuran tipe int. 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.

Rentang nilai tipe data sederhana dalam C++ untuk komputer yang kompatibel dengan IBM PC

Q: Apa arti istilah komputer yang kompatibel dengan IBM PC?
J: Komputer yang kompatibel dengan IBM PC adalah komputer yang secara arsitektur mirip dengan IBM PC, XT, dan AT. Komputer yang kompatibel dengan IBM PC dibangun di atas mikroprosesor yang kompatibel dengan Intel 8086 (dan, seperti yang Anda ketahui, semua prosesor Intel yang lebih baru sepenuhnya kompatibel dengan 8086). Faktanya, hampir semuanya adalah komputer modern.

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

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

Untuk tipe nyata, tabel menunjukkan nilai absolut dari nilai minimum dan maksimum.

Dalam bahasa C, ada perbedaan antara konsep “tipe data” dan “pengubah tipe”. Tipe datanya adalah bilangan bulat dan pengubahnya ditandatangani atau tidak. Bilangan bulat bertanda akan mempunyai nilai positif dan negatif, sedangkan bilangan bulat tak bertanda hanya akan mempunyai nilai positif. Ada lima tipe dasar dalam bahasa C.

  • karakter – karakter.
  • Variabel bertipe char berukuran 1 byte, nilainya berbagai karakter dari tabel kode, misalnya: 'f', ':', 'j' (bila ditulis dalam program, diapit dalam satu kutipan).

  • int – keseluruhan.
  • Ukuran variabel bertipe int tidak ditentukan dalam standar bahasa C. Di sebagian besar sistem pemrograman, ukuran variabel int sesuai dengan ukuran seluruh kata mesin. Misalnya, dalam kompiler untuk prosesor 16-bit, variabel bertipe int berukuran 2 byte. Dalam hal ini, nilai yang ditandatangani dari variabel ini dapat berkisar antara -32768 hingga 32767.

  • mengapung – nyata.
  • Kata kunci float memungkinkan Anda mendefinisikan variabel bertipe nyata. Nilainya memiliki bagian pecahan yang dipisahkan oleh titik, misalnya: -5.6, 31.28, dst. Bilangan real juga dapat ditulis dalam bentuk floating point, contoh: -1.09e+4. Bilangan sebelum lambang “e” disebut mantissa, dan setelah “e” disebut eksponen. Variabel bertipe float menempati 32 bit dalam memori. Ini dapat mengambil nilai dalam kisaran dari 3.4e-38 hingga 3.4e+38.

  • ganda – presisi ganda nyata;
  • Kata kunci double memungkinkan Anda mendefinisikan variabel real presisi ganda. Dibutuhkan ruang memori dua kali lebih banyak daripada variabel float. Variabel bertipe double dapat mengambil nilai dalam rentang 1.7e-308 hingga 1.7e+308.

  • batal – tidak ada nilai.
  • Kata kunci void digunakan untuk menetralisir nilai suatu objek, misalnya untuk mendeklarasikan fungsi yang tidak mengembalikan nilai apapun.

Jenis variabel:

Program beroperasi dengan berbagai data, yang bisa sederhana atau terstruktur. Data sederhana adalah bilangan bulat dan bilangan real, simbol dan pointer (alamat objek dalam memori). Bilangan bulat tidak mempunyai bagian pecahan, tetapi bilangan real mempunyai bagian pecahan. Data terstruktur adalah array dan struktur; mereka akan dibahas di bawah ini.

Variabel adalah sel dalam memori komputer yang mempunyai nama dan menyimpan beberapa nilai. Nilai suatu variabel dapat berubah selama eksekusi program. Ketika nilai baru ditulis ke sel, nilai lama akan dihapus.

Merupakan gaya yang baik untuk memberi nama variabel secara bermakna. Nama variabel dapat berisi satu hingga 32 karakter. Diperbolehkan menggunakan huruf kecil dan besar, angka dan garis bawah, yang dianggap sebagai huruf dalam C. Karakter pertama harus berupa huruf. Nama variabel tidak boleh cocok dengan kata yang dicadangkan.

Ketik karakter

char adalah tipe yang paling ekonomis. Tipe char dapat ditandatangani atau tidak ditandatangani. Dilambangkan sebagai “signed char” (tipe bertanda) dan “unsigned char” (tipe tidak bertanda). Tipe yang ditandatangani dapat menyimpan nilai dalam rentang -128 hingga +127. Unsigned – dari 0 hingga 255. 1 byte memori (8 bit) dialokasikan untuk variabel char.

Kata kunci yang ditandatangani dan tidak ditandatangani menunjukkan bagaimana bit nol dari variabel yang dideklarasikan diinterpretasikan, yaitu jika kata kunci unsigned ditentukan, maka bit nol ditafsirkan sebagai bagian dari suatu angka, jika tidak, bit nol ditafsirkan sebagai ditandatangani.

Ketik int

Nilai integer int bisa pendek atau panjang. Kata kunci pendek ditempatkan setelah kata kunci yang ditandatangani atau tidak ditandatangani. Jadi ada tipenya: int pendek yang ditandatangani, int pendek yang tidak ditandatangani, int panjang yang ditandatangani, int panjang yang tidak ditandatangani.

Variabel bertipe int pendek bertanda (integer pendek bertanda) dapat mengambil nilai dari -32768 hingga +32767, int pendek unsigned (integer pendek unsigned) - dari 0 hingga 65535. Masing-masing dialokasikan tepat dua byte memori (16 bit).

Saat mendeklarasikan variabel bertipe int pendek bertanda tangan, kata kunci bertanda tangan dan pendek dapat dihilangkan, dan tipe variabel tersebut dapat dideklarasikan hanya int. Dimungkinkan juga untuk mendeklarasikan tipe ini dengan satu kata kunci, pendek.

Variabel int pendek unsigned dapat dideklarasikan sebagai unsigned int atau unsigned short.

Untuk setiap nilai int panjang yang ditandatangani atau int panjang yang tidak ditandatangani, 4 byte memori (32 bit) dialokasikan. Nilai variabel jenis ini masing-masing dapat berkisar dari -2147483648 hingga 2147483647 dan dari 0 hingga 4294967295.

Ada juga variabel bertipe long long int, yang dialokasikan memori 8 byte (64 bit). Mereka dapat ditandatangani atau tidak ditandatangani. Untuk tipe yang ditandatangani, rentang nilainya adalah dari -9223372036854775808 hingga 9223372036854775807, untuk tipe yang tidak ditandatangani - dari 0 hingga 18446744073709551615. Tipe yang ditandatangani juga dapat dideklarasikan hanya dengan dua kata kunci yang panjang.

Jenis Jangkauan Kisaran hex Ukuran
karakter yang tidak ditandatangani 0 … 255 0x00...0xFF 8 sedikit
karakter yang ditandatangani
atau sederhananya
arang
-128 … 127 -0x80…0x7F 8 sedikit
unsigned int pendek
atau sederhananya
tidak ditandatangani ke dalam atau pendek tanpa tanda tangan
0 … 65535 0x0000…0xFFFF 16 sedikit
menandatangani int pendek atau masuk ke dalam
atau sederhananya
pendek atau ke dalam
-32768 … 32767 0x8000…0x7FFF 16 sedikit
tidak ditandatangani int panjang
atau sederhananya
tidak ditandatangani panjang
0 … 4294967295 0x00000000… 0xFFFFFFFF 32 sedikit
ditandatangani panjang
atau sederhananya
panjang
-2147483648 … 2147483647 0x80000000… 0x7FFFFFFFF 32 sedikit
tidak ditandatangani lama sekali 0 … 18446744073709551615 0x0000000000000000 … 0xFFFFFFFFFFFFFFFF 64 sedikit
ditandatangani lama sekali
atau sederhananya
Panjang panjang
-9223372036854775808 … 9223372036854775807 0x8000000000000000 … 0x7FFFFFFFFFFFFFFFF 64 sedikit

Mendeklarasikan Variabel

Variabel dideklarasikan dalam pernyataan deklarasi. Pernyataan deklarasi terdiri dari spesifikasi tipe dan daftar nama variabel yang dipisahkan koma. Harus ada titik koma di akhir.

[pengubah] pengidentifikasi type_specifier [, pengidentifikasi] ...

Pengubah – kata kunci ditandatangani, tidak ditandatangani, pendek, panjang.
Penentu tipe adalah kata kunci char atau int yang menentukan tipe variabel yang dideklarasikan.
Identifier adalah nama variabelnya.

karakter x; ke dalam a,b,c; tidak ditandatangani panjang panjang y;

Ketika dideklarasikan, suatu variabel dapat diinisialisasi, yaitu diberi nilai awal.

Int x = 100;

Saat dideklarasikan, variabel x akan langsung berisi angka 100. Sebaiknya deklarasikan variabel yang diinisialisasi pada baris terpisah.

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 terdapat pada digit paling signifikan, dan digit sisanya adalah 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 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 logis 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 sebelah 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;