U ovom ćete tutorijalu s primjerima naučiti svih 6 bitnih operatora u programiranju C.
U aritmetičko-logičkoj jedinici (koja je unutar CPU-a), matematičke operacije poput: zbrajanja, oduzimanja, množenja i dijeljenja rade se na razini bitova. Za izvođenje operacija na razini bita u programiranju na C koriste se bitni operatori.
Operateri | Značenje operatora |
---|---|
& | Bitno I |
| | Bitno ILI |
^ | Bitno XOR |
~ | Bitni dodatak |
<< | Pomak ulijevo |
>> | Pomaknite desno |
Bitni I operator &
Izlaz bitnog AND je 1 ako su odgovarajući bitovi dvaju operanda 1. Ako je bilo koji bit operanda 0, rezultat odgovarajućeg bita procjenjuje se na 0.
Pretpostavimo bitni I rad dviju cijelih 12 i 25.
12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bit rad 12 i 25 00001100 & 00011001 ________ 00001000 = 8 (u decimalnom)
Primjer # 1: Bitni I
#include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; )
Izlaz
Izlaz = 8
Bitni ILI operator |
Izlaz bitnog OR-a iznosi 1 ako je barem jedan odgovarajući bit od dva operanda 1. U C programiranju bitni ILI operator označava se s |.
12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bitno ILI rad 12 i 25 00001100 | 00011001 ________ 00011101 = 29 (u decimalu)
Primjer # 2: Bitno ILI
#include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; )
Izlaz
Izlaz = 29
Bitno XOR (ekskluzivni ILI) operator ^
Rezultat bitnog XOR operatora je 1 ako su odgovarajući bitovi dvaju operanda suprotni. Označava se sa ^.
12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bitno XOR rad 12 i 25 00001100 00011001 ________ 00010101 = 21 (u decimalnom)
Primjer # 3: Bitni XOR
#include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )
Izlaz
Izlaz = 21
Bitni operator komplementa ~
Operator s bitnim pohvalama je unarni operator (radi na samo jednom operandu). Mijenja se 1 na 0 i 0 na 1. Označava se s ~.
35 = 00100011 (u binarnom) Bitni komplement Rad od 35 ~ 00100011 ________ 11011100 = 220 (u decimalu)
Uvrnite bitni operator komplementa u C programiranju
Bitni dodatak 35 (~ 35) je -36 umjesto 220, ali zašto?
Za bilo koji cjelobrojni n bitovni dodatak n bit će -(n+1)
. Da biste to razumjeli, trebali biste imati znanje o komplementu 2.
Dopuna 2
Dopuna dva je operacija nad binarnim brojevima. Komplement broja 2 jednak je komplementu tog broja plus 1. Na primjer:
Decimalni dodatak Binarne 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimalni) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimalni) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimalni) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimalni) Napomena: Preljev se zanemaruje tijekom izračunavanja komplementa 2.
Bitni dodatak od 35 je 220 (u decimalnom). Dodatak dvojke od 220 je -36. Dakle, izlaz je -36 umjesto 220.
Bitni komplement bilo kojeg broja N je - (N + 1). Evo kako:
bitni komplement N = ~ N (predstavljen u obliku komplementa 2) 2'komplement ~ N = - (~ (~ N) +1) = - (N + 1)
Primjer # 4: Bitni komplement
#include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; )
Izlaz
Izlaz = -36 Izlaz = 11
Operatori smjene u programiranju C
Postoje dva operatora smjene u programiranju C:
- Operator desne smjene
- Operator lijeve smjene.
Desni mjenjač
Operator desnog pomaka pomiče sve bitove udesno za određeni broj zadanih bitova. Označava se sa >>.
212 = 11010100 (u binarnom) 212 >> 2 = 00110101 (u binarnom) (desni pomak za dva bita) 212 >> 7 = 00000001 (u binarnom) 212 >> 8 = 00000000 212 >> 0 = 11010100 (bez pomaka)
Lijevi mjenjač
Operator lijevog pomaka pomiče sve bitove prema lijevo za određeni broj navedenih bitova. Položaji bitova koje je napustio operator lijeve smjene popunjavaju se s 0. Simbol lijevog operatora smjene je <<.
212 = 11010100 (u binarnom) 212 << 1 = 110101000 (u binarnom) (lijevi pomak za jedan bit) 212 << 0 = 11010100 (pomak za 0) 212 << 4 = 110101000000 (u binarnom) = 3392 (u decimalnom )
Primjer # 5: Operatori smjene
#include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num<
Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848