7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
|
|
ind5
|
ind4
|
ind3
|
ind2
|
ind1
|
Quyidagi jadvalda C++ dasturlash tilida bayt razryadlari ustida mantiqiy amallar majmuasi keltirilgan.
Amallar
|
Mazmuni
|
&
|
Mantiqiy VA (ko’paytirish)
|
|
|
Mantiqiy YoKI (qo’shish)
|
^
|
Istisno qiluvchi YoKI
|
~
|
Mantiqiy INKOR (inversiya)
|
Razryadli mantiqiy amallarning bajarish natijalarini jadval ko’rinishida ko’rsatish mumkin.
A
|
B
|
A&B
|
A|B
|
A^B
|
~A
|
1
|
1
|
1
|
1
|
0
|
0
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
0
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
1
|
sizeof amali
Har xil turdagi o’zgaruvchilar kompyuter xotirasida turli sondagi baytlarni egallaydi. Bunda, hattoki bir turdagi o’zgaruvchilar ham qaysi kompyuterda yoki qaysi operatsion sistemada amal qilinishiga qarab turli o’lchamdagi xotirani band qilishi mumkin.
C++ dasturlash tilida ixtiyoriy (tayanch va hosilaviy) turdagi o’zgaruvchilarning o’lchamini sizeof amali yordamida aniqlanadi. Bu amalni o’zgarmasga, turga va o’zgaruvchiga qo’llanishi mumkin. Quyida keltirilgan dasturning qismida kompyutening platformasiga mos ravishda tayanch turlarining o’lchamlari chop qilinadi.
cout << “int turi o’lchami: ”<
cout << “float turi o’lchami: ”<
cout << “double turi o’lchami: ”<
cout << “char turi o’lchami: ”<
Razryadli operatorlar
Razryadli mantiqiy amallarni qiymat berish operatori bilan birgalikda bajarilishining quyidagi ko’rinishlari mavjud:
&= – razryadli VA qiymat berish bilan;
|= – razryadli YoKI qiymat berish bilan;
^= – razryadli istisno qiluvchi YoKI qiymat berish bilan.
Baytdagi bitlar qiymatini chapga yoki o’ngga surish uchun, mos ravishda “<<” va “>>” amallari qo’llaniladi. Amaldan keyingi son bitlar nechta o’rin chapga yoki o’ngga surish kerakligini bildiradi.
Masalan:
unsigned char a = 12; // a = 000011002 = 0x0C16
a = a<<2; // a = 001100002 = 0x3016 = 4810
a = a>>3; // a = 000001102 = 0x0616 = 610
Razryadlarni n ta chapga(o’ngga) surish 2n soniga ko’paytirish (bo’lish) amali bilan ekvivalent bo’lib, ko’paytirish (bo’lish)ga nisbatan tez bajariladi. Shuni e’tiborga olish kerakki, operand ishorali son bo’lsa, u holda surish amalidan so’ng uning ishorasi saqlanib qoladi. Agar operand manfiy son bo’lsa, u holda surish amalidan so’ng uning ishorasi saqlanmaydi va matematik nuqtai–nazardan xato natijalar yuzaga keladi:
char b = –120; // b = 100010002 = 0x8816
b = b << 2; // b = 001000002 = 0x2016 = 3210
b = –120; // b = 100010002 = 0x8816
b =b >>3; // b = 111100012 = 0xF116 = -1510
Shu sababli, bu razryadli surish amallari ishorasiz (unsigned) turdagi qiymatlar ustida bajarilgan ma’qul.
Inkrement va dekrement
C++ dasturlash tilida operand qiymatini birga oshirish va kamaytirishning samarali vositalari mavjud. Bular inkrement (++) va dekrement (––) unar amallardir. Operandga nisbanat bu amallarning prefiks va postfisk ko’rinishlari bo’ladi. Prefiks ko’rinishda amal til ko’rsatmasi bo’yicha ish bajarilishidan oldin operandga qo’llaniladi. Postfiks holatda esa amal til ko’rsatmasi bo’yicha ish bajarilgandan keyin operandga qo’llaniladi. Prefiks yoki postfiks amal tushunchasi faqat qiymat berish bilan bog’liq ifodalarda o’rinli:
x = y++; // postfiks
index = ––i; // prefiks
count++; // unar amal, “++count;” bilan ekivalent
abc––; // unar amal, “––abc;” bilan ekvivalent
Bu erda u o’zgaruvchining qiymatini x o’zgaruvchisiga o’zlashtiriladi va keyin bittaga oshiriladi, i o’zgaruvchining qiymati bittaga kamaytirib, index o’zgaruvchisiga o’zlashtiriladi. Prefiksli va postfiksli amallarning ishlash printsipida farq bor. Prefiksli amallar avval qiymatni oshirib keyin qiymat beriladi. Postfiksli amallar avval qiymat berib, keyin qiymatini oshiradi.
int a = 5;
cout << a;
cout << a++;
cout << ++a;
Do'stlaringiz bilan baham: |