Bit bo'yicha va siljish operatsiyalari
Bit bo'yicha va siljish operatsiyalari sonning alohida bitlari yoki bitlari ustida amalga oshiriladi. Ushbu amallarni tushunish uchun raqamlarning ikkilik ko'rinishini ko'rib chiqing. Har bir raqam o'ziga xos ikkilik ko'rinishga ega. Masalan, ikkilik sistemada 4 soni 100, 5 soni esa 101 va hokazo.
Imzolangan raqamlarni yozish uchun ikkita to'ldiruvchi ishlatiladi, unda eng muhim bit imzolanadi. Agar uning qiymati 0 bo'lsa, u holda son ijobiy bo'ladi va uning ikkilik ko'rinishi ishorasiz raqamdan farq qilmaydi. Masalan, 0000 0001 o'nlik 1.
Agar eng muhim bit 1 bo'lsa, biz salbiy raqam bilan ishlaymiz. Masalan, 1111 1111 o'nli raqam -1 ni bildiradi. Shunga ko'ra, 1111 0011 -13 ni bildiradi.
Mantiqiy operatsiyalar
Raqamlar ustidagi mantiqiy amallar bitli amallarni ifodalaydi. Bunday holda, raqamlar ikkilik ko'rinishda ko'rib chiqiladi, masalan, ikkilik tizimda 2 10 va ikkita raqamga ega, 7 raqami 111 va uchta raqamga ega.
& (mantiqiy ko'paytirish)
Ko'paytirish bit bo'yicha amalga oshiriladi va agar ikkala operandda ham bit qiymatlari 1 ga teng bo'lsa, operatsiya 1 ni qaytaradi, aks holda 0 raqami qaytariladi. Masalan:
1
2
3
4
5
6
7
|
int a1 = 2; //010
int b1 = 5; //101
print(a1&b1); //000 - результат 0
int a2 = 4; //100
int b2 = 5; //101
print(a2 & b2); //100 - результат 4
|
Birinchi holda, bizda ikkita 2 va 5 raqamlari bor. Ikkilik tizimda 2 010 sonini, 5 - 101. Sonlarni bit yo'nalishi bo'yicha ko'paytirish (0 * 1, 1 * 0, 0 * 1) 000 natijasini beradi.
Ikkinchi holda, ikkita o'rniga, bizda birinchi raqamda 1 bo'lgan 4 raqami bor, xuddi 5 raqami kabi, shuning uchun bu erda operatsiya natijasi (1 * 1, 0 * 0, 0 * 1) = 100 o'nlik formatda 4 raqami bo'ladi ...
| (mantiqiy qo'shimcha)
Bu operatsiya ikkilik raqamlarda ham bajariladi, ammo endi bu bitdagi kamida bitta raqamda birlik bo'lsa ("mantiqiy OR" operatsiyasi) birlik qaytariladi. Masalan:
1
2
3
4
5
6
|
int a1 = 2; //010
int b1 = 5; //101
print(a1|b1); //111- результат 7
int a2 = 4; //100
int b2 = 5; //101
print(a2 | b2); //101 - результат 5
|
^ (mantiqiy eksklyuziv OR)
Ushbu operatsiya XOR deb ham ataladi, u ko'pincha oddiy shifrlash uchun ishlatiladi:
1
2
3
4
5
6
7
|
int number = 45; // 1001 Значение, которое надо зашифровать - в двоичной форме 101101
int key = 102; //Ключ шифрования - в двоичной системе 1100110
int encrypt = number ^ key; //Результатом будет число 1001011 или 75
print("Зашифрованное число: $encrypt");
int decrypt = encrypt ^ key; // Результатом будет исходное число 45
print("Расшифрованное число: $decrypt");
|
Bu yerda bitli operatsiyalar ham bajariladi. Agar ikkala raqam uchun joriy raqamning har xil qiymatlari bo'lsa, u holda 1 qaytariladi, aks holda 0 qaytariladi. Masalan, 9 ^ 5 ifodasining natijasi 12 raqami bo'ladi. Raqamni ochish uchun biz amal qilamiz. natijaga teskari operatsiya.
~ (mantiqiy inkor)
Raqamning barcha raqamlarini o'zgartiruvchi bit bo'yicha operatsiya: agar bit qiymati 1 bo'lsa, u nolga aylanadi va aksincha.
1
2
|
int a = 12; // 0000 1100
print(~a); // 1111 0011 или -13
|
Shift operatsiyalari
Shift amallari raqamlarning raqamlarida ham bajariladi. Shishish o'ngga va chapga sodir bo'lishi mumkin.
a << b - a raqamini chapga b raqamga siljitadi. Misol uchun, 4 << 1 ifodasi 4 raqamini (bu ikkilik tizimda 100 ni tashkil qiladi) bir raqamni chapga siljitadi, natijada o'nli kasrda 1000 yoki 8 ta bo'ladi.
a >> b - a raqamini o'ngga b raqamga siljitadi. Masalan, 16 >> 1 16 raqamini (ikkilik sistemada bu 10 000) bir raqamni o'ngga siljitadi, ya'ni natijada 1000 yoki o'nli tizimda 8 raqami bo'ladi.
Do'stlaringiz bilan baham: |