07 / 90

C++ Type Modifiers

C++ tur modifikatorlari

C++ dasturlashda asosiy data types ning ma'nosini o'zgartirish uchun tur modifikatorlaridan foydalaniladi.

C++ da to'rt turdagi modifikatorlar mavjud:

  • short
  • long
  • signed
  • unsigned

Bu yerda qisqacha xulosa:

Data Type Size (in Bytes) Meaning signed int 4 Used for integers (equivalent to int). unsigned int 4 Can only store non-negative integers. short 2 Used for small integers.Range: -32768 to 32767 long at least 4 Used for large integers.Equivalent to long int. unsigned long 4 Used for large positive integers or 0.Equivalent to unsigned long int. long long 8 Used for very large integers.Equivalent to long long int. unsigned long long 8 Used for very large positive integers or 0.Equivalent to unsigned long long int. long double 8 Used for large floating-point numbers. signed char 1 Used for characters.Guaranteed range -127 to 127. unsigned char 1 Used for characters.Range 0 to 255.

qisqa turdagi modifikator

Kichik butun sonlar uchun short dan foydalanishimiz mumkin (−32,767 dan 32,767 gacha). Masalan,

example.cpp
// kichik butun son
short a = 12345;

Bu erda a - short butun o'zgaruvchisi.

[!NOTE] short short int ga teng.

uzun turdagi modifikator

Agar biz katta butun sonni saqlashimiz kerak bo'lsa (-2147483647 dan 2147483647 oralig'ida), biz long tip spetsifikatsiyasidan foydalanishimiz mumkin. Masalan,

example.cpp
// katta butun son
long b = 123456;

[!NOTE] long long int ga teng.

Uzun turdagi modifikatordan double o'zgaruvchilari bilan ham foydalanish mumkin.

example.cpp
// katta suzuvchi nuqta raqami
long double c = 0.333333333333333333L;

[!NOTE] long double ni ko'rsatish uchun biz L qo'shimchasidan foydalanamiz. Agar biz L qo'shimchasidan foydalanmasak, bu double qiymati bo'lib, long double ga aylantiriladi (bu ma'lumotlar yo'qolishiga olib kelishi mumkin).

uzoq uzun

long long turini yaratish uchun long ikki marta takrorlanishi mumkin. Bu tip long dan ham kattaroq raqamlar uchun ishlatiladi. long long turi modifikatori faqat int bilan ishlatilishi mumkin.

Masalan,

example.cpp
// long long int
long long num = 12345678;

imzolangan va imzolanmagan modifikatorlar

Belgilangan o'zgaruvchilar ham ijobiy, ham salbiy butun sonlarni, shu jumladan nolni ham o'z ichiga olishi mumkin. Masalan,

example.cpp
// musbat qiymatli butun son
signed int x = 23;

// manfiy qiymatli butun son
signed int y = -13;

// nol qiymatli butun son
signed int z = 0;

Bu yerga,

  • x musbat qiymatli butun songa ega
  • y manfiy qiymatli butun songa ega
  • z nol qiymatli butun songa ega

[!NOTE] Odatiy bo'lib, butun sonlar signed dir. Shuning uchun signed int o'rniga biz to'g'ridan-to'g'ri int dan foydalanishimiz mumkin. signed va unsigned faqat int va char turlari bilan ishlatilishi mumkin.

Belgilanmagan o'zgaruvchilar faqat manfiy bo'lmagan butun qiymatlarni saqlashi mumkin. Masalan,

example.cpp
// musbat qiymatli butun son
unsigned int x = 2;
unsigned int y = 0;

Bu yerga,

  • x musbat qiymatli butun songa ega
  • y nolga ega

Umuman olganda, int o'zgaruvchisi -2,147,483,648 dan 2,147,483,647 gacha bo'lgan qiymatlarni saqlashi mumkin.

unsigned int o'zgaruvchisi esa 0 dan 4,294,967,295 gacha bo'lgan qiymatlarni saqlashi mumkin.

imzolangan, imzosiz va oddiy belgi

C++ da 3 xil char turi mavjud:

  • char
  • signed char
  • unsigned char

Amalda, asosan, faqat 2 tur mavjud:

  • signed char (guaranteed range: -127 to 127)
  • unsigned char (guaranteed range: 0 to 256)

Buning sababi shundaki, turli kompilyatorlar char ni signed char yoki unsigned char sifatida o'zlarining xohishlariga ko'ra ko'rib chiqadilar.

[!NOTE] Eslatmalar: Standart C++ da char signed char yoki unsigned char bilan bir xil emas. Kompilyatorlar amaliylik uchun buni e'tiborsiz qoldiradilar. signed yoki unsigned variantlari o'rniga faqat char dan foydalansak, bu tur oddiy belgi sifatida tanilgan.

Siz taxmin qilganingizdek, signed char ham musbat, ham manfiy butun sonlarni saqlashi mumkin, unsigned char esa faqat musbat sonlarni (shu jumladan 0) saqlashi mumkin.

example.cpp
// oddiy belgi
char plain_1 = 65;
char plain_2 = 0;

// manfiy qiymatga ega oddiy belgi
// ba'zi kompilyatorlar bilan bog'liq muammolarga olib kelishi mumkin
char plain_3 = -56;

// imzolangan belgi
signed char  sin_1 = 12;
signed char  sin_2 = 0;
signed char  sin_3 = -12;

// imzosiz belgi
unsigned char  unsin_1 = 85;
unsigned char  unsin_2 = 0;

Bu yerga,

  • plain_1 musbat qiymatli butun songa ega
  • plain_2 nol qiymatli butun songa ega
  • sin_1 musbat qiymatli butun songa ega
  • sin_2 nol qiymatli butun songa ega
  • sin_3 manfiy butun songa ega
  • unsin_1 musbat qiymatli butun songa ega
  • unsin_2 nol qiymatli butun songa ega

[!NOTE] Raqamli manipulyatsiyalarni amalga oshirish uchun oddiy belgidan foydalanmaslik ma'qul; Buning o'rniga signed char yoki unsigned char ishlatilishi kerak. Oddiy belgi faqat belgilar qiymatlarini saqlash uchun ishlatilishi kerak.