Pembolehubah jenis terapung dalam c. Jenis titik terapung (float, double dan long double)

Kemas kini terakhir: 17/09/2017

Setiap pembolehubah mempunyai jenis tertentu. Dan jenis ini menentukan nilai yang boleh dimiliki oleh pembolehubah, operasi yang boleh dilakukan padanya, dan berapa banyak bait dalam memori yang akan didudukinya. Jenis data asas berikut ditakrifkan dalam bahasa C++:

    bool : jenis boolean. Boleh mengambil satu daripada dua nilai: benar dan salah. Jejak ingatan untuk jenis ini tidak ditakrifkan dengan tepat.

    char : Mewakili satu aksara ASCII. Menduduki 1 bait (8 bit) dalam ingatan. Boleh menyimpan sebarang nilai dari -128 hingga 127, atau dari 0 hingga 255

    signed char : Mewakili satu aksara. Menduduki 1 bait (8 bit) dalam ingatan. Boleh menyimpan sebarang nilai dari -128 hingga 127

    unsigned char : Mewakili satu aksara. Menduduki 1 bait (8 bit) dalam ingatan. Boleh menyimpan sebarang nilai dari 0 hingga 255

    wchar_t : Mewakili watak yang luas. Pada Windows ia memerlukan 2 bait (16 bit) memori, di Linux ia memerlukan 4 bait (32 bit). Boleh menyimpan sebarang nilai daripada julat dari 0 hingga 65,535 (untuk 2 bait), atau dari 0 hingga 4,294,967,295 (untuk 4 bait)

    char16_t : Mewakili satu aksara Unicode. Menduduki 2 bait (16 bit) dalam ingatan. Boleh menyimpan sebarang nilai dari 0 hingga 65,535

    char32_t : Mewakili satu aksara Unicode. Menduduki 4 bait (32 bit) dalam ingatan. Boleh menyimpan sebarang nilai dari 0 hingga 4,294,967,295

    pendek : Mewakili integer dalam julat –32768 hingga 32767. Menduduki 2 bait (16 bit) memori.

    Jenis ini juga mempunyai sinonim short int, signed short int, signed short.

    unsigned short: Mewakili integer dalam julat 0 hingga 65535. Menduduki 2 bait (16 bit) memori.

    Jenis ini juga mempunyai sinonim unsigned short int .

    int: mewakili integer. Bergantung pada seni bina pemproses, ia boleh menduduki 2 bait (16 bit) atau 4 bait (32 bit). Julat nilai had juga boleh berbeza dari –32768 hingga 32767 (dengan 2 bait) atau dari -2,147,483,648 hingga 2,147,483,647 (dengan 4 bait). Tetapi dalam apa jua keadaan, saiz mestilah lebih besar daripada atau sama dengan saiz jenis pendek dan kurang daripada atau sama dengan saiz jenis panjang

    Jenis ini mempunyai sinonim signed int dan signed .

    unsigned int : Mewakili integer positif. Bergantung pada seni bina pemproses, ia mungkin menduduki 2 bait (16 bit) atau 4 bait (32 bit), dan kerana ini, julat nilai had mungkin berbeza: dari 0 hingga 65535 (untuk 2 bait), atau dari 0 hingga 4,294,967,295 (untuk 4 bait).

    unsigned boleh digunakan sebagai sinonim untuk jenis ini

    panjang : Mewakili integer dalam julat −2,147,483,648 hingga 2,147,483,647. Menduduki 4 bait (32 bit) memori.

    Jenis ini juga mempunyai sinonim long int , signed long int dan signed long

    panjang tidak ditandatangani: Mewakili integer dalam julat 0 hingga 4,294,967,295. Menduduki 4 bait (32 bit) memori.

    Mempunyai sinonim unsigned long int .

    panjang panjang: Mewakili integer dalam julat −9,223,372,036,854,775,808 hingga +9,223,372,036,854,775,807. Menduduki biasanya 8 bait (64 bit) memori.

    Mempunyai sinonim long long int , ditandatangani long long int dan ditandatangani long long .

    unsigned long long : Mewakili integer dalam julat 0 hingga 18,446,744,073,709,551,615. Biasanya menduduki 8 bait (64 bit) memori.

    Mempunyai sinonim unsigned long long int .

    terapung : Mewakili nombor nyata titik terapung ketepatan tunggal dalam julat +/- 3.4E-38 hingga 3.4E+38. Menduduki 4 bait (32 bit) dalam ingatan

    double : Mewakili nombor nyata titik terapung ketepatan berganda dalam julat +/- 1.7E-308 hingga 1.7E+308. Menduduki 8 bait (64 bit) dalam ingatan

    long double : Mewakili nombor nyata titik terapung berketepatan ganda sekurang-kurangnya 8 bait (64 bit). Bergantung pada saiz memori yang diduduki, julat nilai yang sah mungkin berbeza-beza.

    void : taip tanpa nilai

Oleh itu, semua jenis data kecuali void boleh dibahagikan kepada tiga kumpulan: aksara (char, wchar_t, char16_t, char32_t), integer (short, int, long, long long) dan jenis nombor titik terapung (float, double, long double).

Jenis watak

Jenis yang digunakan untuk mewakili aksara dalam aplikasi ialah char, wchar_t, char16_t dan char32_t.

Mari kita tentukan beberapa pembolehubah:

Char c="d"; wchar_t d="c";

Pembolehubah char mengambil sebagai nilainya satu aksara dalam petikan tunggal: char c ="d" . Anda juga boleh menetapkan nombor daripada julat yang dinyatakan di atas dalam senarai: char c = 120 . Dalam kes ini, nilai pembolehubah c akan menjadi aksara yang mempunyai kod 120 dalam jadual aksara ASCII.

Perlu dipertimbangkan bahawa untuk mengeluarkan aksara wchar_t ke konsol, anda harus menggunakan bukan std::cout, tetapi aliran std::wcout:

#termasuk int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

Dalam kes ini, aliran std::wcout boleh berfungsi dengan kedua-dua char dan wchar_t. Dan aliran std::cout untuk pembolehubah wchar_t akan mengeluarkan kod berangkanya dan bukannya aksara.

Piawaian C++11 menambah jenis char16_t dan char32_t, yang berorientasikan penggunaan Unicode. Walau bagaimanapun, urutan untuk bekerja dengan jenis ini belum lagi dilaksanakan di peringkat OS. Oleh itu, jika anda perlu memaparkan nilai pembolehubah jenis ini kepada konsol, anda perlu menukar pembolehubah kepada jenis char atau wchar_t:

#termasuk int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

Dalam kes ini, apabila mengeluarkan, pembolehubah didahului oleh operasi tuang kepada jenis char - (char) , kerana nilai pembolehubah b, c dan d ditukar kepada jenis char dan boleh dikeluarkan kepada konsol menggunakan aliran std::cout.

Jenis integer

Jenis integer diwakili oleh jenis berikut: pendek, pendek tidak bertanda, int, int tidak bertanda, panjang, panjang tidak bertanda, panjang panjang dan panjang tidak bertanda:

Pendek a = -10; pendek tidak bertanda b= 10; int c = -30; unsigned int d = 60; panjang e = -170; panjang tidak bertanda f = 45; panjang panjang g = 89;

Jenis nombor titik terapung

Jenis titik terapung dan nombor pecahan diwakili oleh apungan, ganda dua dan ganda panjang:

Terapung a = -10.45; b ganda = 0.00105; c berganda panjang = 30.890045;

Saiz jenis data

Senarai di atas menunjukkan untuk setiap jenis saiz yang didudukinya dalam ingatan. Walau bagaimanapun, perlu diperhatikan bahawa pembangun pengkompil boleh memilih had saiz untuk jenis secara bebas, berdasarkan keupayaan perkakasan komputer. Piawaian hanya menetapkan nilai minimum yang sepatutnya. Sebagai contoh, untuk jenis int dan pendek nilai minimum ialah 16 bit, untuk jenis panjang - 32 bit, untuk jenis berganda panjang. Dalam kes ini, saiz jenis panjang mestilah tidak kurang daripada saiz jenis int, dan saiz jenis int mestilah tidak kurang daripada saiz jenis pendek, dan saiz jenis double panjang mesti menjadi lebih besar daripada dua kali ganda. Sebagai contoh, pengkompil g++ untuk Windows menggunakan 12 bait untuk beregu panjang, dan pengkompil terbina dalam Visual Studio dan juga berjalan di bawah Windows menggunakan 8 bait untuk beregu panjang. Iaitu, walaupun dalam platform yang sama, penyusun yang berbeza mungkin mendekati saiz jenis data tertentu secara berbeza. Tetapi secara umum, saiz yang ditunjukkan di atas semasa menerangkan jenis data digunakan.

Walau bagaimanapun, terdapat situasi apabila perlu mengetahui dengan tepat saiz jenis tertentu. Dan untuk ini, C++ mempunyai operator sizeof(), yang mengembalikan saiz memori dalam bait yang diduduki oleh pembolehubah:

#termasuk int main() ( nombor berganda panjang = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Output konsol semasa menyusun dalam g++:

saiz(nombor) = 12

Pada masa yang sama, apabila mentakrifkan pembolehubah, adalah penting untuk memahami bahawa nilai pembolehubah tidak boleh melebihi had yang digariskan untuk jenisnya. Sebagai contoh:

Nombor pendek tidak ditandatangani = -65535;

Pengkompil G++, apabila menyusun atur cara dengan baris ini, akan menghasilkan ralat yang menyatakan bahawa nilai -65535 tidak berada dalam julat nilai yang sah untuk jenis pendek yang tidak ditandatangani dan akan dipotong.

Dalam Visual Studio, kompilasi boleh diteruskan tanpa ralat, tetapi pembolehubah nombor akan menerima nilai 2 - hasil daripada menukar nombor -65535 kepada jenis pendek yang tidak ditandatangani. Iaitu, sekali lagi, hasilnya tidak akan seperti yang diharapkan. Nilai pembolehubah hanyalah koleksi bit dalam ingatan yang ditafsirkan mengikut jenis tertentu. Dan untuk jenis yang berbeza, set bit yang sama boleh ditafsirkan secara berbeza. Oleh itu, adalah penting untuk mempertimbangkan julat nilai untuk jenis tertentu apabila memberikan nilai kepada pembolehubah.

penentu auto

Kadangkala sukar untuk menentukan jenis ungkapan. Dan mengikut piawaian terkini, anda boleh membiarkan pengkompil membuat kesimpulan jenis objek itu sendiri. Dan penentu auto digunakan untuk ini. Selain itu, jika kita mentakrifkan pembolehubah dengan penentu auto, pembolehubah ini mesti dimulakan dengan beberapa nilai:

Nombor automatik = 5;

Berdasarkan nilai yang diberikan, pengkompil akan membuat kesimpulan jenis pembolehubah. Pembolehubah yang tidak dimulakan dengan penentu auto tidak dibenarkan.

Dalam pelajaran ini kita akan melihat jenis data integer, julat nilainya, pembahagian dan limpahan: apakah ia dan contoh.

Jenis data integer

Jenis data integer ialah jenis yang pembolehubahnya hanya boleh mengandungi integer (tanpa bahagian pecahan, contohnya: -2, -1, 0, 1, 2). Dalam C++ terdapat lima jenis integer asas yang tersedia untuk digunakan:

Catatan: Jenis aksara ialah kes khas, ia adalah integer dan jenis data aksara. Kami akan membincangkan perkara ini dengan lebih terperinci dalam salah satu pelajaran berikut.

Perbezaan utama antara jenis integer di atas ialah semakin besar, semakin banyak nilai yang boleh disimpan oleh pembolehubah jenis tersebut.

Mentakrifkan Pembolehubah Integer

Ia berlaku seperti berikut:

char c; pendek int si; // s pendek yang sah; //pilihan int i; panjang int li; // panjang sah l; // sebaik-baiknya panjang panjang int lli; // sah long long ll; // lebih disukai

Walaupun nama penuh short int , long int , dan long long int boleh digunakan, versi yang dipendekkan (tanpa int) lebih disukai untuk digunakan. Selain itu, penambahan int secara berterusan menjadikan kod sukar dibaca (mudah dikelirukan dengan pembolehubah).

Julat nilai dan tanda jenis data integer

Seperti yang telah anda ketahui dari pelajaran sebelumnya, pembolehubah dengan bilangan bit n boleh menyimpan 2n nilai yang mungkin. Tetapi apakah maksud ini? Mereka yang berada dalam julat. Julat- ini adalah nilai dari dan ke mana jenis data tertentu boleh disimpan. Julat pembolehubah integer ditentukan oleh dua faktor: saiznya (dalam bit) dannya tanda(yang mungkin ditandatangani atau tidak ditandatangani).

ditandatangani(ditandatangani) bermakna pembolehubah boleh mengandungi nombor positif dan negatif. Untuk mengisytiharkan pembolehubah sebagai ditandatangani, gunakan kata kunci ditandatangani:

ditandatangani char c; ditandatangani pendek s; ditandatangani int i; ditandatangani panjang l; ditandatangani panjang panjang ll;

ditandatangani char c ;

ditandatangani pendek s;

ditandatangani int i ;

ditandatangani panjang l;

ditandatangani panjang panjang ll;

Secara lalai, kata kunci yang ditandatangani ditulis sebelum jenis data.

Pembolehubah integer bertanda 1 bait mempunyai julat nilai dari -128 hingga 127. Sebarang nilai dari -128 hingga 127 (termasuk) boleh disimpan dengan selamat di dalamnya.

Dalam sesetengah kes, kita boleh mengetahui terlebih dahulu bahawa nombor negatif tidak akan digunakan dalam program. Ini sangat biasa apabila menggunakan pembolehubah untuk menyimpan kuantiti atau saiz sesuatu (contohnya, ketinggian atau berat anda tidak boleh negatif). Jenis integer tidak ditandatangani(tidak bertanda) hanya boleh mengandungi nombor positif. Untuk mengisytiharkan pembolehubah sebagai tidak ditandatangani, gunakan kata kunci tidak ditandatangani:

aksara c yang tidak ditandatangani; s pendek tidak ditandatangani; unsigned int i; l panjang tidak ditandatangani; unsigned long long ll;

aksara c yang tidak ditandatangani;

s pendek tidak ditandatangani;

unsigned int i ;

l panjang tidak ditandatangani;

unsigned long long ll ;

Pembolehubah integer tidak bertanda 1 bait mempunyai julat nilai dari 0 hingga 255.

Sila ambil perhatian bahawa mengisytiharkan pembolehubah sebagai tidak ditandatangani bermakna ia tidak boleh mengandungi nombor negatif (hanya yang positif).

Sekarang setelah anda memahami perbezaan antara yang ditandatangani dan yang tidak ditandatangani, mari lihat julat nilai jenis data yang berbeza:

Saiz/Jenis Julat nilai
1 bait ditandatangani -128 hingga 127
1 bait tidak ditandatangani dari 0 hingga 255
2 bait ditandatangani daripada -32,768 kepada 32,767
2 bait tidak ditandatangani dari 0 hingga 65 535
4 bait ditandatangani daripada -2 147 483 648 hingga 2 147 483 647
4 bait tidak ditandatangani dari 0 hingga 4 294 967 295
8 bait ditandatangani daripada -9 223 372 036 854 775 808 kepada 9 223 372 036 854 775 807
8 bait tidak ditandatangani dari 0 hingga 18 446 744 073 709 551 615

Untuk ahli matematik: pembolehubah bertanda dengan bilangan bit ke-n mempunyai julat dari -(2 n-1) hingga 2 n-1 -1. Pembolehubah tidak bertanda dengan bilangan bit ke-n mempunyai julat dari 0 hingga (2n)-1. Untuk bukan ahli matematik: gunakan jadual :)

Pengaturcara pemula kadangkala keliru antara pembolehubah yang ditandatangani dan yang tidak ditandatangani. Tetapi ada cara mudah untuk mengingati perbezaan mereka. Apakah perbezaan antara nombor negatif dan nombor positif? Betul! Minus di hadapan. Jika tiada tolak, maka nombor itu positif. Oleh itu, jenis integer bertanda bermakna tanda tolak boleh hadir, i.e. nombor boleh sama ada positif atau negatif. Jenis integer yang tidak ditandatangani bermakna tanda tolak di hadapan tidak hadir sepenuhnya, i.e. nombor hanya boleh positif.

Apakah lalai: ditandatangani atau tidak ditandatangani?

Jadi apa yang berlaku jika kita mengisytiharkan pembolehubah tanpa menandatangani atau tidak ditandatangani?

Semua jenis data integer kecuali char ditandatangani secara lalai. Jenis aksara boleh sama ada ditandatangani atau tidak ditandatangani (tetapi biasanya ditandatangani).

Dalam kebanyakan kes, kata kunci yang ditandatangani tidak ditulis (ia sudah digunakan secara lalai), kecuali jenis aksara (lebih baik untuk menjelaskan di sini).

Pengaturcara, sebagai peraturan, elakkan daripada menggunakan jenis integer yang tidak ditandatangani melainkan terdapat keperluan tertentu untuknya, kerana, menurut statistik, lebih banyak ralat berlaku dengan pembolehubah yang tidak ditandatangani berbanding dengan pembolehubah yang ditandatangani.

Peraturan: Gunakan jenis integer yang ditandatangani bukannya tidak ditandatangani.

Limpahan

Soalan: "Apakah yang berlaku jika kita cuba menggunakan nilai yang berada di luar julat nilai jenis data tertentu?" Jawapan: melimpah. Limpahan(Bahasa Inggeris) "limpahan") berlaku apabila bit hilang kerana pembolehubah tidak diperuntukkan memori yang mencukupi untuk menyimpannya.

Contoh limpahan

Pertimbangkan pembolehubah tidak bertanda, yang terdiri daripada 4 bit. Mana-mana nombor binari yang disenaraikan dalam jadual di atas akan dimuatkan di dalam pembolehubah ini.

"Tetapi apa yang berlaku jika kita cuba menetapkan nilai yang mengambil lebih daripada 4 bit?" Betul! Limpahan. Pembolehubah kami hanya akan menyimpan 4 bit paling tidak signifikan (yang di sebelah kanan), semua yang lain akan hilang.

Sebagai contoh, jika kita cuba memasukkan nombor 21 ke dalam pembolehubah 4-bit kita:

Sistem perpuluhan Sistem binari
21 10101

Nombor 21 mengambil 5 bit (10101). 4 bit di sebelah kanan (0101) akan dimuatkan ke dalam pembolehubah, dan bit paling kiri (1) akan hilang begitu sahaja. Itu. pembolehubah kami akan mengandungi 0101, yang sama dengan 101 (sifar hadapan tidak dikira), dan ini sudah pun nombor 5, bukan 21.

Catatan: Akan ada pelajaran yang berasingan untuk menukar nombor daripada perduaan kepada perpuluhan dan sebaliknya, di mana kita akan mempertimbangkan dan membincangkan segala-galanya secara terperinci.

Sekarang mari kita lihat contoh dalam kod (jenis pendek mengambil 16 bit):

#termasuk int main() ( unsigned short x = 65535; // nilai terbesar yang boleh disimpan oleh pembolehubah 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

int utama()

x pendek tidak bertanda = 65535 ; // nilai terbesar yang boleh disimpan oleh pembolehubah tidak bertanda 16-bit

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

x = x + 1 ; // 65536 ialah nombor yang lebih besar daripada nombor maksimum yang dibenarkan daripada julat nilai yang sah. Oleh itu, limpahan akan berlaku kerana pembolehubah x tidak boleh menyimpan 17 bit

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

pulangan 0;

x ialah: 65535
x sekarang: 0

apa dah jadi? Limpahan berlaku kerana kami cuba menjejalkan sesuatu yang tidak boleh ditolak ke dalam pembolehubah x.

Bagi mereka yang ingin mengetahui lebih lanjut: Nombor 65535 dalam binari diwakili sebagai 1111 1111 1111 1111. 65535 ialah nombor terbesar yang boleh disimpan oleh pembolehubah integer tidak bertanda 2-bait (16-bit) kerana ia menggunakan kesemua 16 bit. Apabila kita menambah 1, kita mendapat nombor 65536. Nombor 65536 diwakili dalam binari sebagai 1 0000 0000 0000 0000, dan mengambil 17 bit! Oleh itu, bit yang paling penting (iaitu 1) hilang, dan semua 16 bit di sebelah kanan dikekalkan. Gabungan 0000 0000 0000 0000 sepadan dengan perpuluhan 0, yang merupakan hasil kami.

Begitu juga, kita akan mendapat limpahan dengan menggunakan nombor yang kurang daripada julat minimum nilai yang sah:

#termasuk int main() ( unsigned short x = 0; // nilai terkecil yang pembolehubah tidak bertanda 2-bait boleh menyimpan std::cout<< "x was: " << x << std::endl; x = x - 1; // переполнение! std::cout << "x is now: " << x << std::endl; return 0; }

#termasuk

int utama()

pendek tak bertanda x = 0 ; // nilai terkecil yang boleh disimpan oleh pembolehubah tidak bertanda 2 bait

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

x = x - 1 ; // melimpah!

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

pulangan 0;

Hasil daripada menjalankan program di atas:

x ialah: 0
x sekarang: 65535

Limpahan membawa kepada kehilangan maklumat, yang tidak pernah menjadi perkara yang baik. Sekiranya terdapat sedikit pun syak wasangka atau cadangan bahawa nilai pembolehubah mungkin merupakan nombor yang berada di luar julat nilai yang dibenarkan bagi jenis data yang digunakan, gunakan jenis data yang lebih besar!

Bahagian ini akan membincangkan jenis data utama dalam C++; jenis data ini juga dipanggil terbina dalam. Bahasa pengaturcaraan C++ ialah bahasa pengaturcaraan yang boleh diperluaskan. Istilah boleh diperluas bermaksud bahawa sebagai tambahan kepada jenis data terbina dalam, anda boleh mencipta jenis data anda sendiri. Itulah sebabnya terdapat sejumlah besar jenis data dalam C++. Kami akan mengkaji hanya yang utama.

Jadual 1 - jenis data C++
taip bait Julat nilai yang diterima

jenis data integer (Boolean).

bool 1 0 / 255

jenis data integer (karakter).

char 1 0 / 255

jenis data integer

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

jenis data titik terapung

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

Jadual 1 menunjukkan jenis data utama dalam C++. Seluruh jadual dibahagikan kepada tiga lajur. Lajur pertama menunjukkan perkataan terpelihara, yang akan menentukan, setiap jenis datanya sendiri. Lajur kedua menunjukkan bilangan bait yang diperuntukkan untuk pembolehubah dengan jenis data yang sepadan. Lajur ketiga menunjukkan julat nilai yang boleh diterima. Sila ambil perhatian bahawa dalam jadual semua jenis data disusun daripada terkecil kepada terbesar.

jenis data bool

Yang pertama dalam jadual ialah jenis data bool jenis data integer, kerana julat nilai yang sah adalah integer dari 0 hingga 255. Tetapi seperti yang telah anda perhatikan, dalam kurungan ia mengatakan jenis data logik, dan ini juga benar. Kerana bool digunakan secara eksklusif untuk menyimpan hasil ungkapan Boolean. Ungkapan Boolean boleh mempunyai satu daripada dua hasil: benar atau salah. benar - jika ungkapan logik adalah benar, salah - jika ungkapan logik adalah salah.

Tetapi oleh kerana julat nilai sah jenis data bool adalah dari 0 hingga 255, adalah perlu untuk memadankan julat ini dengan pemalar logik benar dan salah yang ditakrifkan dalam bahasa pengaturcaraan. Oleh itu, pemalar benar adalah bersamaan dengan semua nombor dari 1 hingga 255 termasuk, manakala palsu berterusan adalah bersamaan dengan hanya satu integer - 0. Pertimbangkan atur cara menggunakan jenis data bool.

// data_type.cpp: Mentakrifkan titik masuk untuk aplikasi konsol. #include "stdafx.h" #include menggunakan ruang nama std; int main(int argc, char* argv) ( bool boolean = 25; // pembolehubah jenis bool bernama boolean if (boolean) // keadaan pengendali if cout<< "true = " << boolean << endl; // выполнится в случае истинности условия else cout << "false = " << boolean << endl; // выполнится в случае, если условие ложно system("pause"); return 0; }

DALAM baris 9pembolehubah jenis diisytiharkan bool , yang dimulakan kepada 25. Secara teorinya, selepasbaris 9, dalam pembolehubah boolean sepatutnya mengandungi nombor 25, tetapi sebenarnya pembolehubah ini mengandungi nombor 1. Seperti yang saya katakan, nombor 0 adalah nilai palsu, nombor 1 adalah nilai benar. Intinya ialah dalam pembolehubah seperti bool boleh mengandungi dua nilai - 0 (salah) atau 1 (benar). Manakala di bawah jenis data bool satu bait keseluruhan diperuntukkan, yang bermaksud pembolehubah jenis bool boleh mengandungi nombor dari 0 hingga 255. Untuk menentukan nilai palsu dan benar, hanya dua nilai 0 dan 1 diperlukan. Timbul persoalan: "Untuk apa 253 nilai yang lain?"

Berdasarkan situasi ini, kami bersetuju untuk menggunakan nombor dari 2 hingga 255 sebagai bersamaan dengan nombor 1, iaitu kebenaran. Inilah sebabnya mengapa pembolehubah boolean mengandungi nombor 25 dan bukan 1. Dalam baris 10 -13 diisytiharkan, yang memindahkan kawalan kepada pengendali dalam baris 11, jika keadaan adalah benar, dan pengendali masuk baris 13, jika syarat itu palsu. Keputusan program ditunjukkan dalam Rajah 1.

Benar = 1 Untuk meneruskan, tekan sebarang kekunci. . .

Rajah 1 - jenis data bool

Jenis data char

Jenis data char ialah jenis data integer yang digunakan untuk mewakili aksara. Iaitu, setiap aksara sepadan dengan nombor tertentu dari julat. Jenis data char juga dipanggil jenis data aksara, kerana perwakilan grafik aksara dalam C++ adalah mungkin terima kasih kepada char. Untuk mewakili aksara dalam C++, jenis data char diperuntukkan satu bait, satu bait mengandungi 8 bit, kemudian kami menaikkan dua kepada kuasa 8 dan mendapatkan nilai 256 - bilangan aksara yang boleh dikodkan. Oleh itu, menggunakan jenis data char, anda boleh memaparkan mana-mana daripada 256 aksara. Semua aksara yang dikodkan diwakili dalam .

ASCII (daripada Kod Standard Bahasa Inggeris untuk Pertukaran Maklumat) - Kod standard Amerika untuk pertukaran maklumat.

Pertimbangkan program menggunakan jenis data char.

// symbols.cpp: Mentakrifkan titik masuk untuk aplikasi konsol. #include "stdafx.h" #include menggunakan ruang nama std; int main(int argc, char* argv) ( simbol char = "a"; // mengisytiharkan pembolehubah jenis char dan memulakannya dengan simbol "a" cout<< "symbol = " << symbol << endl; // печать символа, содержащегося в переменной symbol char string = "сайт"; // объявление символьного массива (строки) cout << "string = " << string << endl; // печать строки system("pause"); return 0; }

Jadi, dalam baris 9pembolehubah bernama simbol , ia diberikan nilai simbol"a" ( Kod ASCII). DALAM baris 10 pengendali cout mencetak aksara yang terkandung dalam pembolehubah simbol DALAM baris 11mengisytiharkan tatasusunan rentetan dengan nama tali , dan saiz tatasusunan ditentukan secara tersirat. Rentetan disimpan dalam tatasusunan rentetan"laman web" . Sila ambil perhatian bahawa apabila kami menyimpan simbol ke dalam pembolehubah seperti char , kemudian selepas tanda sama kami meletakkan petikan tunggal di mana kami menulis simbol. Apabila memulakan tatasusunan rentetan dengan rentetan tertentu, petikan berganda diletakkan selepas tanda sama, di mana rentetan tertentu ditulis. Seperti watak biasa, rentetan dikeluarkan menggunakan operator cout , baris 12. Keputusan program ditunjukkan dalam Rajah 2.

Simbol = rentetan = tapak Untuk meneruskan, tekan sebarang kekunci. . .

Rajah 2 - jenis data char

Jenis data integer

Jenis data integer digunakan untuk mewakili nombor. Terdapat enam daripadanya dalam Jadual 1: int pendek, int pendek tidak bertanda, int, int tidak bertanda, int panjang, int panjang tidak bertanda . Mereka semua mempunyai saiz memori mereka sendiri dan julat nilai yang diterima. Bergantung pada pengkompil, saiz memori yang diduduki dan julat nilai yang diterima mungkin berbeza-beza. Dalam Jadual 1, semua julat nilai yang diterima dan saiz memori yang diduduki diambil untuk pengkompil MVS2010. Selain itu, semua jenis data dalam Jadual 1 disusun dalam susunan yang semakin meningkat bagi saiz memori yang diduduki dan julat nilai yang diterima. Julat nilai yang diterima, satu cara atau yang lain, bergantung pada saiz memori yang diduduki. Sehubungan itu, lebih besar saiz memori yang diduduki, lebih besar julat nilai yang diterima. Juga, julat nilai yang diterima berubah jika jenis data diisytiharkan dengan awalan yang tidak ditandatangani. Awalan yang tidak ditandatangani bermaksud bahawa jenis data tidak boleh menyimpan nilai yang ditandatangani, maka julat nilai positif digandakan, contohnya, jenis data int pendek dan int pendek yang tidak ditandatangani.

Awalan jenis data integer:

pendek awalan memendekkan jenis data yang digunakan dengan mengurangkan saiz memori yang didudukinya;

panjang awalan memanjangkan jenis data yang digunakan dengan meningkatkan saiz memori yang didudukinya;

tidak ditandatangani—awalan menggandakan julat nilai positif, manakala julat nilai negatif tidak boleh disimpan dalam jenis data ini.

Jadi, pada asasnya, kita mempunyai satu jenis integer untuk mewakili integer: jenis data int. Terima kasih kepada awalan pendek, panjang, tidak ditandatangani, pelbagai jenis data int tertentu muncul, berbeza dalam saiz memori yang diduduki dan (atau) julat nilai yang diterima.

Jenis Data Titik Terapung

Terdapat dua jenis data titik terapung dalam C++: float dan double. Jenis data titik terapung direka bentuk untuk menyimpan nombor titik terapung. Jenis data terapung dan berganda boleh menyimpan nombor titik terapung positif dan negatif. Jenis data apungan mempunyai separuh jejak memori jenis data berganda, yang bermaksud julat nilai yang diterima juga lebih kecil. Jika jenis data apungan diisytiharkan dengan awalan panjang, maka julat nilai yang diterima akan sama dengan julat nilai yang diterima jenis data berganda. Pada asasnya, jenis data titik terapung diperlukan untuk menyelesaikan masalah dengan ketepatan pengiraan yang tinggi, seperti transaksi wang.

Jadi, kami telah melihat perkara utama mengenai jenis data utama dalam C++. Yang tinggal hanyalah untuk menunjukkan dari mana semua julat nilai yang diterima ini dan saiz memori yang diduduki berasal. Dan untuk ini kami akan membangunkan program yang akan mengira ciri utama semua jenis data yang dibincangkan di atas.

// data_types.cpp: Mentakrifkan titik masuk untuk aplikasi konsol. #include "stdafx.h" #include // Perpustakaan manipulasi I/O #include // fail pengepala fungsi matematik #include menggunakan ruang nama std; int utama(int argc, char* argv) ( cout<< " data type " << "byte" << " " << " max value "<< endl // tajuk lajur <<"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 disiarkan supaya anda boleh melihat ciri-ciri jenis data dalam sistem anda. Tidak perlu memahami kod tersebut, kerana program ini menggunakan pernyataan kawalan yang kemungkinan besar anda belum biasa. Untuk kenalan yang cetek dengan kod program, saya akan menerangkan beberapa perkara di bawah. Operator saiz() Mengira bilangan bait yang diperuntukkan untuk jenis data atau pembolehubah. Fungsi pow(x,y) mengangkat makna x kepada kuasa y , fungsi ini tersedia daripada fail pengepala . manipulator tetap dan setprecision(). tersedia daripada fail pengepala . Yang pertama diperbaiki , menghantar nilai dalam bentuk tetap kepada aliran keluaran. Manipulator setprecision(n) memaparkan n tempat perpuluhan. Nilai maksimum jenis data tertentu dikira menggunakan formula berikut:

Max_val_type = 2^(b * 8 - 1) - 1; // untuk jenis data dengan nombor negatif dan positif // dengan b ialah bilangan bait yang diperuntukkan dalam ingatan untuk pembolehubah dengan jenis data ini // darab dengan 8, kerana terdapat 8 bit dalam satu bait // tolak 1 dalam kurungan, kerana nombor julat mesti dibahagikan kepada dua untuk nilai positif dan negatif // tolak 1 pada akhir, kerana julat nombor bermula dari sifar // jenis data dengan awalan unsigned max_val_type = 2^(b * 8) - 1; // untuk jenis data hanya dengan nombor positif // penjelasan untuk formula adalah serupa, hanya unit tidak ditolak daripada kurungan

Contoh bagaimana program berfungsi boleh dilihat dalam Rajah 3. Lajur pertama menunjukkan jenis data utama dalam C++, lajur kedua menunjukkan saiz memori yang diperuntukkan untuk setiap jenis data, dan lajur ketiga menunjukkan nilai maksimum yang sepadan. jenis data boleh mengandungi. Nilai minimum didapati serupa dengan maksimum. Untuk jenis data dengan awalan tidak bertanda, nilai minimum ialah 0.

Nilai maks bait jenis data bool = 1 255.00 char = 1 255.00 int pendek = 2 32767.00 int pendek yang tidak ditandatangani = 2 65535.00 int = 4 2147483647.00 int yang tidak ditandatangani = 4 42957.00 int yang tidak ditandatangani = 4 42947.48 0 int panjang yang tidak ditandatangani = 4 4294967295.00 apungan = 4 2147483647.00 dua kali ganda = 8 9223372036854775808.00 Untuk meneruskan, tekan sebarang kekunci. . .

Rajah 3 - jenis data C++

Jika, sebagai contoh, pembolehubah jenis short int diberikan nilai 33000, maka grid bit akan melimpah, kerana nilai maksimum dalam pembolehubah jenis short int ialah 32767. Iaitu, beberapa nilai lain akan disimpan dalam pembolehubah jenis short int, kemungkinan besar ia akan menjadi negatif. Memandangkan kami telah menyentuh tentang jenis data int, perlu diingat bahawa anda boleh meninggalkan kata kunci int dan menulis, sebagai contoh, hanya pendek . Pengkompil akan mentafsirkan entri sedemikian sebagai short int . Perkara yang sama berlaku untuk awalan panjang dan tidak bertanda. Sebagai contoh:

// singkatan untuk jenis data int short a1; // sama seperti short int long a1; // sama seperti long int unsigned a1; // sama seperti unsigned int unsigned short a1; // sama seperti int pendek yang tidak ditandatangani

Dalam pengaturcaraan, jenis data ialah koleksi dua set: satu set nilai dan satu set operasi yang boleh digunakan pada mereka. Sebagai contoh, operasi penambahan (+), pendaraban (*), pembahagian integer (/), baki (%) dan penolakan (−) boleh digunakan pada jenis data integer bukan negatif yang terdiri daripada set nombor asli terhingga.

Bahasa pengaturcaraan biasanya mempunyai set jenis data primitif—jenis yang disediakan oleh bahasa pengaturcaraan sebagai unit terbina dalam asas. Dalam C++, pencipta bahasa itu memanggil jenis jenis asas. Jenis asas dalam C++ ialah:

  • boolean(bool);
  • watak (cth char);
  • int (cth int);
  • titik terapung (cth terapung);
  • penghitungan (ditakrifkan oleh pengaturcara);
  • batal .

Di atas yang disenaraikan, jenis berikut dibina:

  • demonstratif (cth int*);
  • tatasusunan (cth char);
  • rujukan (cth double&);
  • struktur lain.

Mari kita beralih kepada konsep literal (contohnya, 1, 2.4F, 25e-4, 'a', dll.): literal ialah entri dalam kod sumber program yang mewakili nilai tetap. Dalam erti kata lain, literal hanyalah perwakilan objek (nilai) beberapa jenis dalam kod program. C++ mempunyai keupayaan untuk menulis nilai integer, titik terapung, aksara, boolean dan rentetan.

Literal jenis integer boleh ditulis sebagai:

  • sistem nombor ke-10. Contohnya, 1205 ;
  • Sistem nombor ke-8 dalam format 0 + nombor. Sebagai contoh, 0142;
  • Sistem nombor ke-16 dalam format 0x + nombor. Contohnya, 0x2F.

24, 030, 0x18 - ini semua adalah rekod nombor yang sama dalam sistem nombor yang berbeza.
Untuk menulis nombor titik terapung, gunakan notasi titik: 0.1, .5, 4. - sama ada dalam
tatatanda eksponen - 25e-100. Seharusnya tiada ruang dalam rekod sedemikian.

Nama yang mana kita boleh mengaitkan nilai yang ditulis dalam literal dipanggil pembolehubah. Pembolehubah ialah kawasan ingatan yang dinamakan atau boleh dialamatkan yang alamatnya boleh digunakan untuk mengakses data. Data ini ditulis, ditulis semula dan dipadamkan dalam ingatan dengan cara tertentu semasa pelaksanaan program. Pembolehubah membolehkan anda mengakses data pada bila-bila masa dan, jika perlu, mengubahnya. Data yang boleh diambil daripada nama pembolehubah dipanggil nilai pembolehubah.
Untuk menggunakan pembolehubah dalam atur cara, ia mesti diisytiharkan, dan jika perlu, ia boleh ditakrifkan (= dimulakan). Pengisytiharan pembolehubah dalam teks program semestinya mengandungi 2 bahagian: jenis asas dan pengisytihar. Penentu dan pemula adalah bahagian pilihan:

Const int contoh = 3; // di sini const ialah penentu // int ialah jenis asas // contoh ialah nama pembolehubah // = 3 - pemula.

Nama pembolehubah ialah urutan aksara yang terdiri daripada huruf abjad Latin (huruf kecil dan besar), nombor dan/atau garis bawah, tetapi aksara pertama tidak boleh menjadi nombor. Nama pembolehubah harus dipilih supaya sentiasa mudah untuk meneka apa yang disimpan, sebagai contoh, "monthPayment". Dalam nota dan dalam amalan, kami akan menggunakan notasi CamelCase untuk peraturan untuk merekodkan pembolehubah. Nama pembolehubah tidak boleh bertepatan dengan perkataan yang dikhaskan dalam bahasa; contoh perkataan tersebut ialah: jika, sementara, fungsi, goto, suis, dsb.

Sebagai tambahan kepada nama pembolehubah, pengisytihar boleh mengandungi aksara tambahan:

  • * - penunjuk; sebelum nama;
  • *const - penunjuk tetap; sebelum nama;
  • & - pautan; sebelum nama;
  • - tatasusunan; selepas nama;
  • () - fungsi; selepas nama.

Pemula membolehkan anda menentukan nilai untuk pembolehubah sejurus selepas pengisytiharannya. Pemula bermula dengan literal kesamaan (=) dan kemudian meneruskan untuk menetapkan nilai pembolehubah. Secara umumnya, tanda sama dalam C++ menandakan operasi tugasan; dengan bantuannya anda boleh menetapkan dan menukar nilai pembolehubah. Ia mungkin berbeza untuk jenis yang berbeza.

Penentu menentukan atribut tambahan selain daripada jenis. Penentu const yang diberikan dalam contoh membolehkan anda melarang perubahan seterusnya kepada nilai pembolehubah. Pembolehubah tidak berubah tersebut dipanggil pemalar atau pemalar.

Mengisytiharkan pemalar tanpa permulaan tidak akan berfungsi atas sebab logik:

Const int EMPTY_CONST; // ralat, pembolehubah malar tidak dimulakan const int CONTOH = 2; // pemalar dengan nilai 2 CONTOH = 3; // ralat, cuba berikan nilai kepada pembolehubah malar

Apabila menamakan pemalar, adalah kebiasaan untuk menggunakan hanya huruf besar, memisahkan perkataan dengan aksara garis bawah.

Jenis data asas dalam C++

Semasa meneliti setiap jenis, pembaca tidak boleh lupa tentang definisi jenis data.

1. Jenis integer (char, pendek (int), int, panjang (int), panjang panjang)

Dari namanya mudah difahami bahawa set nilai terdiri daripada integer. Juga, set nilai setiap jenis yang disenaraikan boleh ditandatangani atau tidak ditandatangani. Bilangan elemen yang terkandung dalam set bergantung pada saiz memori yang digunakan untuk menyimpan nilai jenis tersebut. Sebagai contoh, untuk pembolehubah jenis char 1 bait memori diperuntukkan, jadi jumlah elemen ialah:

  • 2 8N = 2 8 * 1 = 256, di mana N ialah saiz memori dalam bait untuk menyimpan nilai

Dalam kes ini, julat integer yang tersedia adalah seperti berikut:

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

Secara lalai, pembolehubah integer dianggap ditandatangani. Untuk menunjukkan dalam kod bahawa pembolehubah mesti tidak ditandatangani, atribut yang ditandatangani ditambahkan pada jenis asas di sebelah kiri, i.e. tidak ditandatangani:

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

Jenis yang disenaraikan hanya berbeza dalam saiz memori yang diperlukan untuk penyimpanan. Oleh kerana bahasa C++ agak bergantung kepada mesin, standard bahasa hanya menjamin keadaan berikut:

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

Biasanya saiz jenis adalah seperti berikut: char - 1, short - 2, int - 4, long -8, long long - 8 bait.

Anda boleh melakukan operasi aritmetik dengan nilai jenis integer: +, -, *, /, %; operasi perbandingan: ==, !=,<=, <, >, >=; operasi bit: &, |, xor,<<, >>.
Kebanyakan operasi, seperti penambahan, pendaraban, penolakan dan perbandingan, mudah difahami. Kadangkala, selepas menjalankan operasi aritmetik, hasilnya mungkin berada di luar julat nilai; dalam kes ini program akan menghasilkan ralat.
Pembahagian integer (/) mencari bahagian integer bagi satu integer dibahagikan dengan yang lain. Sebagai contoh:

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

Simbol peratusan (%) menandakan operasi menentukan baki pembahagian dua integer:

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

Operasi yang lebih sukar untuk difahami ialah operasi bitwise: & (DAN), | (ATAU), xor (eksklusif ATAU),<< (побитовый сдвиг влево), >> (anjakan sedikit ke kanan).

Operasi bit AND, OR dan XOR menggunakan operasi logik yang sepadan untuk setiap bit maklumat:

  • 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 pemprosesan imej, 3 saluran digunakan untuk warna: merah, biru dan hijau - ditambah ketelusan, yang disimpan dalam pembolehubah int, kerana setiap saluran mempunyai julat nilai dari 0 hingga 255. Dalam sistem nombor heksadesimal, nilai tertentu ditulis seperti berikut: 0x180013FF; maka nilai 18 16 sepadan dengan saluran merah, 00 16 - biru, 13 16 - hijau, FF - saluran alfa (transparensi). Untuk memilih saluran tertentu daripada integer sedemikian, saluran yang dipanggil digunakan. topeng, di mana kedudukan yang kami minati ialah F 16 atau 1 2. Iaitu, untuk menyerlahkan nilai saluran biru, anda mesti menggunakan topeng, i.e. bitwise DAN:

Int blue_channel = 0x180013FF & 0x00FF0000;

Selepas itu nilai yang terhasil dialihkan ke kanan dengan bilangan bit yang diperlukan.

Anjakan sedikit menganjakkan nombor ke kiri atau kanan dengan seberapa banyak digit binari seperti yang dinyatakan di sebelah kanan operasi. Sebagai contoh, nombor 39 untuk jenis char ditulis dalam binari seperti berikut: 00100111. Kemudian:

Char binaryContoh = 39; // 00100111 char result = binaryContoh<< 2; // сдвигаем 2 бита влево, результат: 10011100

Jika pembolehubah adalah jenis yang tidak ditandatangani, maka hasilnya akan menjadi nombor 156, untuk yang ditandatangani ia adalah sama dengan -100. Ambil perhatian bahawa untuk jenis integer yang ditandatangani, unit dalam bit yang paling ketara bagi perwakilan bit ialah tanda bahawa nombor itu negatif. Dalam kes ini, nilai dalam bentuk binari yang terdiri daripada kesemuanya sepadan dengan -1; jika 1 hanya dalam digit yang paling ketara, dan digit yang tinggal adalah sifar, maka nombor tersebut mempunyai nilai minimum untuk jenis tertentu: untuk char ia ialah -128.

2. Jenis titik terapung (float, double (float))

Set nilai titik terapung ialah subset nombor nyata, tetapi tidak setiap nombor nyata boleh diwakili dalam binari, yang kadangkala membawa kepada ralat bodoh:

Nilai apungan = 0.2; nilai == 0.2; // ralat, nilai di sini tidak akan sama dengan 0.2.

Apabila bekerja dengan pembolehubah titik terapung, pengaturcara tidak seharusnya menggunakan ujian kesamaan atau ketaksamaan; sebaliknya, ujian untuk jatuh dalam selang tertentu biasanya digunakan:

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

Selain operasi perbandingan, jenis titik terapung menyokong 4 operasi aritmetik yang sepadan sepenuhnya dengan operasi matematik dengan nombor nyata.

3. Jenis Boolean (logik) (bool)

Hanya terdiri daripada dua nilai: benar (benar) dan salah (salah). Untuk bekerja dengan pembolehubah jenis ini, operasi logik digunakan: ! (BUKAN), == (kesamaan), != (ketaksamaan), && (logik DAN), || (logik ATAU). Keputusan setiap operasi boleh didapati dalam jadual kebenaran yang sepadan. Sebagai contoh:

X Y XOR0 0 0 0 1 1 1 0 1 1 1 0

4. Jenis aksara (char, wchar_t)

Jenis aksara bukan sahaja jenis integer (biasanya jenis ini dipanggil bait), tetapi juga jenis aksara, menyimpan nombor aksara daripada jadual sebagai aksara ASCII. Sebagai contoh, kod 0x41 sepadan dengan aksara 'A' dan 0x71 - 't'.

Kadangkala terdapat keperluan untuk menggunakan aksara yang tidak ditetapkan dalam jadual ASCII dan oleh itu memerlukan lebih daripada 1 bait untuk penyimpanan. Terdapat watak yang luas untuk mereka (wchar_t).

5.1. Tatasusunan

Tatasusunan membolehkan anda menyimpan set berurutan elemen dari jenis yang sama. Tatasusunan disimpan dalam ingatan sebagai blok bersebelahan, jadi anda tidak boleh mengisytiharkan tatasusunan tanpa menyatakan saiznya. Untuk mengisytiharkan tatasusunan, kurungan segi empat sama () ditulis selepas nama pembolehubah yang menunjukkan saiznya. Sebagai contoh:

Int myArray; // Tatasusunan 5 elemen jenis integer

Untuk memulakan tatasusunan, nilai disenaraikan dalam pendakap kerinting. Anda boleh memulakan dengan cara ini hanya pada masa pengisytiharan berubah. Dengan cara ini, dalam kes ini, tidak perlu menentukan saiz array:

Int odds = (1, 3, 7, 9, 11); // Tatasusunan dimulakan dengan 5 nilai

Untuk mengakses nilai tertentu dalam tatasusunan (elemen tatasusunan), gunakan operasi capaian indeks () yang menunjukkan nombor elemen (nombor bermula dari 0). Sebagai contoh:

Kemungkinan; // akses kepada elemen pertama tatasusunan. Mengembalikan kemungkinan nilai 1; // akses kepada elemen ketiga. Mengembalikan nilai 7 kemungkinan = 13; // Berikan nilai baharu kepada elemen ke-5 bagi kemungkinan tatasusunan; // ralat akses

5.3. rentetan

Untuk menulis rentetan, pengaturcara menggunakan idea bahawa rentetan ialah siri berurutan (tatasusunan) aksara. Untuk mengenal pasti hujung baris, gunakan aksara hujung baris khas: '\0'. Watak istimewa ini, yang terdiri daripada garis miring ke belakang dan watak mengenal pasti, dipanggil watak kawalan atau melarikan diri. Terdapat juga, sebagai contoh, '\n' - permulaan baris baharu, '\t' - penjadualan. Untuk menulis garis miring ke belakang dalam rentetan, escape digunakan - garis miring lain diletakkan sebelum tanda itu sendiri: ‘\’. Melarikan diri juga digunakan untuk menulis tanda petikan.

Mari buat pembolehubah rentetan:

Char textContoh = ('T', 'e', ​​​​'s', 't', '\0'); // rentetan "Ujian" ditulis

Terdapat tatatanda yang dipermudahkan untuk permulaan rentetan:

Char textContoh = "Ujian"; // Aksara terakhir tidak ditulis, tetapi saiznya masih 5

Tanpa pergi ke butiran, berikut ialah satu lagi jenis data yang berguna - rentetan. rentetan
Jenis ini boleh, sebagai contoh, ditambah:

String hello = "Hello,"; nama rentetan = "Maks!"; rentetan hello_name = hello + name; // Dapatkan rentetan "Hello, Max!"

6. Pautan

Int a = 2; // pembolehubah "a" menunjuk kepada nilai 2 int &b = a; // pembolehubah “b” menunjuk ke tempat yang sama dengan “a” b = 4; // dengan menukar nilai b, pengaturcara menukar nilai a. Sekarang a = 4 int & c = 4; // ralat, anda tidak boleh melakukan ini, kerana rujukan tidak boleh diberikan nilai

7. Indeks

Untuk memahami jenis data ini, anda perlu ingat bahawa banyak nilai jenis ini adalah alamat sel memori di mana data bermula. Penunjuk juga menyokong operasi tambah (+), tolak (-) dan nyahrujuk (*).

Alamat 0x0 bermakna penunjuk kosong, i.e. tidak menunjuk kepada sebarang data. Alamat ini mempunyai literalnya sendiri - NULL:

Int *nullPtr = NULL; // penuding nol

Menambah dan menolak alamat dengan integer atau alamat lain membolehkan
bergerak di sekitar memori yang tersedia untuk program.

Operasi mendapatkan semula data bermula pada alamat yang disimpan dalam penunjuk dipanggil dereferencing (*). Program ini membaca bilangan sel memori yang diperlukan dan mengembalikan nilai yang disimpan dalam ingatan.

Int valueInMemory = 2; // tetapkan pembolehubah jenis integer int *somePtr = // salin alamat pembolehubah, di sini & - mengembalikan alamat pembolehubah somePtr; // alamat sel memori, contohnya, 0x2F *somePtr; // nilai disimpan dalam 4 sel: 0x2F, 0x30, 0x31 dan 0x32

Operasi penugasan, yang secara sintaksis sama dengan operasi salin, tidak tersedia untuk penunjuk. Dalam erti kata lain, anda boleh menyalin alamat penuding lain atau alamat pembolehubah, tetapi anda tidak boleh menentukan nilai alamat itu sendiri.

Penunjuk itu sendiri disimpan dalam ingatan, seperti nilai pembolehubah jenis lain, dan menduduki 4 bait, jadi anda boleh membuat penunjuk ke penunjuk.

8. Pemindahan

Penghitungan adalah satu-satunya jenis asas yang ditakrifkan oleh pengaturcara. Pada umumnya, penghitungan ialah set tertib pemalar integer bernama, dengan nama penghitungan ialah jenis asas.

Warna enum (MERAH, BIRU, HIJAU);

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

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

Selalunya mudah untuk menggunakan penghitungan yang nilainya adalah kuasa dua, kerana dalam perwakilan binari, nombor yang merupakan kuasa 2 akan terdiri daripada 1 dan sifar. Sebagai contoh:

8 10 = 00001000 2

Hasil penambahan nombor ini bersama-sama sentiasa menunjukkan dengan jelas nombor yang telah ditambah:

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

batal

Secara sintaksis, jenis lompang tergolong dalam jenis asas, tetapi ia hanya boleh digunakan sebagai sebahagian daripada jenis yang lebih kompleks, kerana Tiada objek jenis void. Biasanya, jenis ini digunakan untuk menunjukkan bahawa fungsi tidak mempunyai nilai pulangan atau sebagai jenis asas penuding kepada objek jenis yang tidak ditentukan:

Objek tidak sah; // ralat, tiada objek jenis void void // ralat, tiada rujukan kepada void void *ptr; // ok, simpan penunjuk kepada jenis yang tidak diketahui

Selalunya kita akan menggunakan void secara khusus untuk menunjukkan bahawa fungsi tidak mengembalikan sebarang nilai. Penunjuk jenis lompang digunakan apabila pengaturcara mengambil tanggungjawab penuh untuk integriti memori dan penghantaran jenis yang betul.

Pelakon

Selalunya perlu untuk menghantar nilai pembolehubah satu jenis kepada yang lain. Dalam kes di mana set nilai jenis asal ialah subset jenis yang lebih besar (contohnya, int ialah subset panjang dan panjang ialah dua kali ganda), pengkompil dapat secara tersirat ( secara tersirat) tukar jenis nilai.

integer = 2; terapung terapung = integer; // terapung = 2.0

Lemparan jenis terbalik akan dilakukan dengan kehilangan maklumat, jadi hanya bahagian integer nombor titik terapung akan kekal, bahagian pecahan akan hilang.

Terdapat kemungkinan penukaran jenis eksplisit; untuk ini, di sebelah kiri pembolehubah atau mana-mana nilai jenis asal, tulis jenis yang pelakon akan dilakukan dalam kurungan:

Nilai int = (int) 2.5;

Operasi unari dan binari

Operasi yang kami lakukan sebelum ini dipanggil binari: di sebelah kiri dan kanan simbol operasi adalah nilai atau pembolehubah, contohnya, 2 + 3. Selain operasi binari, bahasa pengaturcaraan juga menggunakan operasi unari yang digunakan untuk pembolehubah . Mereka boleh terletak sama ada di sebelah kiri atau di sebelah kanan pembolehubah; beberapa operasi sedemikian telah ditemui sebelum ini - operasi penyahrujukan (*) dan mengambil alamat pembolehubah (&) adalah unary. Operator “++” dan “—” masing-masing menambah dan menurunkan nilai pembolehubah integer sebanyak 1, dan boleh ditulis sama ada di sebelah kiri atau di sebelah kanan pembolehubah.

C++ juga menggunakan tatatanda trengkas untuk operasi binari dalam kes apabila bahagian kiri dan kanan ungkapan mengandungi pembolehubah yang sama, i.e. beberapa operasi dilakukan pada nilai pembolehubah dan hasil operasi disimpan dalam pembolehubah yang sama:

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

Jawapan:
  1. Jenis data integer:

short int, unsigned short int, int, unsigned int, panjang, unsigned long.

  1. Jenis data titik terapung (sepadan dengan jenis sebenar):

terapung, ganda, panjang ganda.

  1. Jenis data aksara:

char (char bertandatangan), unsigned char, wchar_t.

  1. Jenis data Boolean:

bool.

  1. Jenis data terhitung (diperkenalkan dalam Visual C++):

enum.

2. Apakah ciri menggunakan jenis data integer?

Dalam C++, jenis data integer utama ialah: short int, unsigned short int, int, unsigned int, long (long int), unsigned long (unsigned long int).

Jenis data ini mewakili nilai daripada set integer. Sebagai contoh:

2 -100 398

Jenis data yang bermula dengan awalan tidak bertanda hanya boleh mengandungi nombor positif.

Data jenis int pendek, int pendek yang tidak ditandatangani mengambil separuh daripada ruang memori daripada data int, jenis int yang tidak ditandatangani.

Data jenis panjang, panjang tidak ditandatangani menggunakan ruang memori dua kali lebih banyak daripada data jenis int, int tidak ditandatangani.

3. Bagaimana untuk menerangkan pembolehubah bernama x jenis integer dalam atur cara?

Jawapan:
int x; // integer yang ditandatangani

Akibatnya, di bawah pembolehubah x ruang memori sebanyak 4 bait akan diperuntukkan. Saiz memori yang diperuntukkan untuk pembolehubah bergantung pada ciri komputer, jenis sistem pengendalian dan tetapan pengkompil.

4. Bagaimana untuk menulis nombor 239 ke dalam pembolehubah jenis integer?

Untuk melakukan ini, gunakan pengendali tugasan, yang dilambangkan dengan simbol '='.

Jawapan 1. Memasukkan nombor ke dalam pembolehubah selepas penerangannya.

int x; x = 239;

Jawapan 2. Memasukkan nombor ke dalam pembolehubah semasa penerangannya (pemulaan awal).

int x = 239;

5. Apakah ciri-ciri jenis data titik terapung?

Jenis data titik terapung membolehkan anda mewakili nilai daripada satu set nombor nyata. Sebagai contoh:

8.35 -990.399 239.0.

C++ mempunyai jenis data titik terapung asas berikut:

terapung, ganda, panjang ganda.

Pembolehubah jenis berganda mengambil 2 kali lebih banyak ruang dalam memori komputer daripada pembolehubah jenis apungan.

Selain itu, pembolehubah jenis berganda yang panjang mengambil 2 kali lebih banyak ruang dalam memori komputer daripada pembolehubah jenis berganda.

6. Bagaimana untuk menerangkan pembolehubah yang mengambil nilai titik terapung?

Contoh menghuraikan pembolehubah jenis apungan, berganda, berganda panjang:

terapung f; d ganda; panjang berganda ld;

7. Bagaimana untuk menulis nilai berangka ke pembolehubah titik terapung?

Contoh memasukkan data berangka ke dalam pembolehubah titik terapung:

apungan f = -9928.45; // pemulaan awal d ganda; panjang berganda ld; d = 0.445332; // pengendali tugasan ld = 3892923898239.030903; // pengendali tugasan

8. Bagaimana untuk menukar pembolehubah apungan kepada jenis int?

Untuk melakukan ini, operasi pemutus jenis digunakan. Dalam kurungan anda perlu menunjukkan nama jenis pelakon sedang dilemparkan.

terapung a; int b; a = 8.457; b = (int ) a; // b = 8

Apabila menggunakan operasi penghantaran jenis, anda perlu mengambil kira sekatan yang dikenakan pada jenis yang menggunakan lebih sedikit ruang dalam memori komputer.

Sebagai contoh, pembolehubah jenis int pendek boleh mewakili julat nombor yang lebih kecil daripada pembolehubah jenis apungan atau berganda. Penyenaraian berikut melimpah nilai dalam pembolehubah jenis short int :

int pendek i; terapung f; f = 3990099.8; i = (int )f; // i = -7597 - limpahan

9. Bagaimana untuk menukar pembolehubah daripada jenis int kepada jenis double?

Contoh penghantaran daripada int kepada dua kali ganda:

int i; d ganda; i = 982; d = (berganda)i; // d = 982.0

10. Apakah ciri menggunakan data char (data aksara) dalam program?

Data jenis char mewakili nilai aksara bagi kod yang dimasukkan daripada papan kekunci. Kod simbol ialah integer.

Sebagai contoh, kod untuk aksara 'f' ialah 102.

Serpihan kod yang mengira kod aksara:

kod int; simbol char; simbol = "f" ; kod = (int )simbol; // kod = 102

Data jenis char adalah integer yang sama. Data jenis char mengambil 1 bait dalam memori komputer.

Hubungan aksara-ke-kod terletak dalam jadual simbol Windows. Aksara dengan kod dari 0 hingga 127 adalah aksara BIOS terpelihara. Ia termasuk simbol yang paling biasa digunakan, simbol angka dan simbol Latin. Watak-watak ini tidak boleh diubah.

Aksara dengan kod dari 128 hingga 255 ialah aksara serantau yang diikat pada abjad tertentu komputer di mana sistem pengendalian Windows dipasang.

11. Apakah ciri menggunakan bool jenis data (jenis logik)?

Pembolehubah jenis bool hanya boleh mengambil dua nilai:

benar - kebenaran,

palsu - palsu.

Pembolehubah ini digunakan untuk menguji ungkapan Boolean. Nilai berangka benar ialah 1. Nilai berangka palsu ialah 0 .

Coretan kod yang mentakrifkan nilai angka benar dan salah :

int hasil; bool b; hasil = (int)benar; // keputusan = 1 b = palsu ; hasil = (int )b; // keputusan = 0

Coretan kod yang menukar jenis int dan float kepada bool:

int i; terapung f; bool b; i = 6; b = (bool )i; // b = Benar f = 0.0; b = (bool )f; // b = Salah

12. Bagaimana untuk menentukan saiz memori yang diduduki oleh pembolehubah jenis tertentu?

Operasi sizeof() digunakan untuk ini.

Coretan kod yang mentakrifkan saiz beberapa jenis data:

int d; d = saiz(char); // d = 1 d = sizeof(unsigned int); // d = 4 d = saiz(terapung); // d = 4 d = saiz(berganda); // d = 8

13. Bagaimanakah pembolehubah pelbagai jenis dimulakan?

int d = 28; terapung z = (apung )2.85; char c = "k" ; String ^s = "Hello!" ; ganda r = -8.559;

14. Bagaimana untuk menentukan nilai maksimum yang dibenarkan (minimum yang dibenarkan) bagi pembolehubah jenis tertentu?

Untuk menentukan nilai maksimum atau minimum bagi pembolehubah jenis tertentu, pustaka Rangka Kerja .NET menggunakan sifat MaxValue dan MinValue.

Contoh penentuan nilai had pembolehubah pelbagai jenis.

Untuk pembolehubah jenis int :

// taip int int i; panjang MaxInt; MinInt panjang; MaxInt = (panjang )i.MaxValue; // MaxInt = 2147483647 MinInt = (panjang )i.MinValue; // MinInt = -2147483648

Untuk pembolehubah jenis short int :

// taip short int pendek int si; int MaxInt; int MinInt; MaxInt = (int )si.MaxValue; // MaxInt = 32767 MinInt = (int )si.MinValue; // MinInt = -32768

Untuk pembolehubah jenis unsigned int :

// taip unsigned int unsigned int ui; unsigned int MaxInt; unsigned int MinInt; MaxInt = ui.MaxValue; // MaxInt = 4294967295 MinInt = ui.MinValue; // MinInt = 0

Untuk pembolehubah apungan:

// jenis apungan terapung f; terapung MaxF; terapung MinF; MaxF = f.MaxValue; // MaksF = 3.402823E+38 MinF = f.MinValue; // MinF = -3.402823E+38

Untuk pembolehubah jenis berganda:

// taip dua kali d ganda; berganda MaxD; berganda MinD; Maks = d.MaxValue; // Maks = 1.79769313486232E+308 Min = d.MinValue; // Min = -1.79769313486232E+308

Untuk pembolehubah jenis char:

// taip char char c; int MaxC; int MinC; Maks = (int )c.MaxValue; // Maks = 127 Min = (int )c.MinValue; // Min = -128

15. Apakah ciri-ciri menggunakan jenis enum?

Jenis enum ialah jenis data enumerasi. Ia menentukan nilai mnemonik untuk set nilai integer. Setiap nilai mnemonik mempunyai kandungan tertentu dan diwakili oleh integer.

Contoh menggunakan jenis enum untuk mewakili bulan dalam setahun:

enum bulan ( Januari, Februari, Mac, April, Mei, Jun, Julai, Ogos, September, Oktober, November, Disember) mn; mn = Januari; // mn = 0 mn = Mac; // mn = 2 mn = September; // mn = 8

Contoh di bawah menerangkan pembolehubah bernama mn daripada jenis enum bulan. Nilai mnemonik untuk bulan (Januari, Februari, …) bermula dari 0 (0, 1, 2, …). Mnemonik Januari ialah nilai integer 0, mnemonik Februari ialah integer 1, dan seterusnya.

Jadi, menggunakan jenis enum, mnemonik boleh digunakan dalam teks program untuk kejelasan kod sumber yang lebih baik.

Anda juga boleh menulisnya seperti ini:

mn = (enum bulan)2; // mn = Mac mn = (enum bulan)11; // mn = Disember

16. Apakah ciri-ciri jenisbatal dalam program padaC++ ?

Jenis data kosong digunakan dalam kes berikut:

  • jika anda perlu menerangkan fungsi yang tidak mengembalikan sebarang nilai (lihat contoh);
  • jika anda perlu menerangkan fungsi yang tidak menerima parameter (lihat contoh).

Contoh. MyFun() ialah fungsi tanpa parameter yang tidak mengembalikan nilai (mengembalikan jenis void ) dan tidak mengambil parameter.

awam : batal MyFun(void ) { // badan fungsi // ... kembali; // kembali daripada fungsi yang tidak mengembalikan nilai } // panggil fungsi daripada program ... MyFun(); ...

17. Adakah mungkin untuk mengisytiharkan pembolehubah jenisbatal dalam sesuatu program?

Ini tidak mungkin kerana jenis kekosongan tidak dikaitkan dengan nilai.

Mengisytiharkan pembolehubah jenis tidak sah menghasilkan ralat penyusunan dengan mesej berikut:

"Penggunaan haram jenis tidak sah"

18. Apakah ciri-ciri jeniswchar_ t VVisual C++ ?

Pembolehubah jenis char (lihat perenggan sebelumnya) digunakan untuk menyimpan aksara ASCII 8-bit.

Jenis wchar_t digunakan untuk menyimpan aksara yang merupakan sebahagian daripada set aksara besar. Sebagai contoh, abjad Cina mempunyai sejumlah besar aksara. 8 digit tidak mencukupi untuk mewakili keseluruhan set aksara Cina. Oleh itu, jika anda perlu menggunakan program di pasaran antarabangsa, adalah dinasihatkan untuk menggantikan jenis char dengan wchar_t.

Contoh menggunakan jenis wchar_t.

... wchar_t t; // 2 bait memori diperuntukkan untuk pembolehubah t t = "s"; ...