Raqamli malumot turlari va amallar
Key Point. C++ da butun, haqiqiy turlar va +, -, *, /, % operatorlari bilan birgalikda 9 ta raqamli malumot turlari mavjud.
2.8.1-raqamli turlar.
Har bir malumo turi qiymatlar sohasiga ega. Kompilyator har o`zgaruvchi va o`zgarmasga uning turiga qarab xotiradan joy ajratadi. C++ odatiy qoidalariga ko`ra raqamli qiymatlar, belgilar va mantiqiy qiymatlar bilan ishlaydi. Ushbu qismda raqamli qiymatlar va ular ishtirokidagi amallar bilan tanishib chiqamiz.
2.1-jadval. Raqamli turlar ro`yxati, ularning sonli oraliq chegaralari va xotira hajmlari
Nomi
|
Sinonimi
|
Sonli oraliq
|
Xotira hajmi
|
short
|
short int
|
|
16-bit signed
|
unsigned short
|
unsigned short int
|
|
16-bit unsigned
|
int signed
|
|
|
32-bit
|
unsigned
|
unsigned int
|
|
32-bit unsigned
|
long
|
long int
|
|
32-bit signed
|
unsigned long
|
unsigned long int
|
|
32-bit unsigned
|
float
|
|
Negative range:
-3.4028235E+38 to -1.4E-45
Positive range:
1.4E-45 to 3.4028235E+38
|
32-bit IEEE 754
|
double
|
|
Negative range:
-1.7976931348623157E+308 to -4.9E-324
Positive range:
4.9E-324 to 1.7976931348623157E+308
|
64-bit IEEE 754
|
long double
|
|
Negative range:
-1.18E+4932 to -3.37E-4932
Positive range:
3.37E-4932 to 1.18E+4932
Significant decimal digits: 19
|
80-bit
|
C++ butun qiymatlarning 3ta turini qo`llaydi: short, int va long. Har bir butun tur ikki xil xususiyat bilan keladi: shorali va ishorasiz. Butun qiymatli sonlarning yarmini manfiy ishorali, qolgan yarmini esa nomanfiy (musbat) ishorali sonlar tashkil etadi. Ishorasiz berilgan intlarning barchasi musbat ko`rinishda kiritiladi. Chunki, eng katta ishorali belgi olgan xotira hajmiga undan ikki karra kattaroq ishorasiz sonni yozish mumkin. Agar siz o`zgaruvchi faqat musbat qiymat qabul qilishini bilsangiz, uni unsigned bilan elon qilish kerak. Misol uchun:
short inti = 2;
bu bilan bir xil:
shorti = 2;
C++ haqiqiy sonlarning uch turi bilan ishlaydi: float, double, va long double. double turi odatda float turidan ikki marta katta bo`ladi. Shuningdek, double ikkilik aniqlikda, float esa bir birlik aniqlikda hisoblanadi. long double esa doubledan kattaroq. Ko`pgina amaliy dasturlar uchun doubledan foydalanish maqulroq.
Qulaylik uchun C++ bosh faylida INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, FLT_MIN, FLT_MAX, DBL_MIN, va DBL_MAX o`zgarmaslarini taniydi. Bu o`zgarmaslar dasturlashda qo`l keladi. Quyidagi 2.5-ro`yxatda keltirilgan dasturni ishga tushirib, o`zgarmas qiymatlar qanday qilib kompilyator tomonidan tanilayotganini ko`rishimiz mumkin:
2.5-ro`yxat. LimitsDemo.cpp
1 #include
2 #include
3 using namespacestd;
4
5 intmain()
6 {
7 cout << "INT_MIN is "<< INT_MIN << endl;
8 cout << "INT_MAX is "<< INT_MAX << endl;
9 cout << "LONG_MIN is "<< LONG_MIN << endl;
10 cout << "LONG_MAX is "<< LONG_MAX << endl;
11 cout << "FLT_MIN is "<< FLT_MIN << endl;
12 cout << "FLT_MIN is "<< FLT_MAX << endl;
13 cout << "DBL_MIN is "<< DBL_MIN << endl;
14 cout << "DBL_MIN is "<< DBL_MAX << endl;
15
16 return 0;
17 }
INT_MIN is -2147483648
INT_MAX is 2147483647
LONG_MIN is -2147483648
LONG_MAX is 2147483647
FLT_MIN is 1.17549e-038
FLT_MAX is 3.40282e+038
DBL_MIN is 2.22507e-308
DBL_MAX is 1.79769e+308
|
Mazkur o`zgarmaslar eski kompilyatorlar tomonidan tanilmasligi mumkin. Biz qo`llaydigan o`zgarmaslar kompilyatorda va kompyuterda turlicha hajmda joy egallashi mumkin. Ko`pincha int va long bir xil hajm oladi. Bazi timlarda long 8 baytni oladi.
Kompyuterda tur yoki o`zgaruvchining hajmini belgilash uchun sizeof funksiyasidan foydalanish mumkin. 2.6-ro`yxatda int, long, va double turlarning hamda yosh va yuza o`zgaruvchilarining kompyuterimizdagi hajmini belgilashga misol keltirilgan.
2.6-ro`yxat. SizeDemo.cpp
1 #include
2 using namespacestd;
3
4 intmain()
5 {
6 cout << "int ning hajmi: "<< sizeof(int) << " bytes"<< endl;
7 cout << "long ning hajmi: "<< sizeof(long) << " bytes"<< endl;
8 cout << "double ning hajmi: "<< sizeof(double)
9 << " bytes"<< endl;
10
11 double yuza = 5.4;
12 cout << "yuza o`zgaruvchi hajmi: "<< sizeof(yuza)
13 << " bytes"<< endl;
14
15 int yosh = 31;
16 cout << "yosh o`zgaruvchi hajmi: "<< sizeof(yosh)
17 << " bytes"<< endl;
18
19 return 0;
20 }
The size of int: 4 bytes
The size of long: 4 bytes
The size of double: 8 bytes
The size of variable area: 8 bytes
The size of variable age: 4 bytes
|
Bu yerda sizeof(int), sizeof(long), va sizeof(double)lar (6-8-satrlar) int, long va double turlariga baytlarda, sizeof(yuza) va sizeof(yosh) lar yuza va yosh o`zgaruvchilariga baytlarda hajm ajratayapti.
2.8.2. Raqamli literallar.
Raqamli literallar dastur qismlarida o`zgarmas qiymat sifatida keladi. Quyidagi ko`rsatmada 34 va 0.305 lar literallar:
inti = 34;
doublefootToMeters = 0.305;
Odatda butun turli literallar o`nli butun son ko`rinishda ifodalanadi. Sakkizlik butun literaldan foydalanish uchun 0 (nol)dan oldin yoziladi. Oltilik o`lchamdagi butun literalni yozish uchun esa 0x yoki 0X ifodalari qo`llaniladi. Masalan, quyidagi kod FFFF raqamini 65535 o`nli son deb qabul qilsa, o`nlikdagi 8 soni sakkizlikdagi 10 soniga tenglashtiriladi.
cout << 0xFFFF<< " "<< 010;
2.8.3 Raqamli operatorlar
Raqamli malumot turlari uchun standart operatorlar tayinlangan: qo`shish (+), ayirish (-), ko`paytirish (*), bo`lish (/) va foiz (%) (2.2-jadval).
Do'stlaringiz bilan baham: |