C Bitvis operatører: AND, OR, XOR, komplement og skiftoperasjoner

I denne opplæringen vil du lære om alle de 6 bitvise operatørene i C-programmering med eksempler.

I aritmetisk-logisk enhet (som er innenfor CPU) gjøres matematiske operasjoner som: addisjon, subtraksjon, multiplikasjon og divisjon i bitnivå. For å utføre bitnivåoperasjoner i C-programmering, brukes bitvise operatorer.

Operatører Betydning av operatører
& Bitvis OG
| Bitvis ELLER
^ Bitvis XOR
~ Bitvis komplement
<< Skift til venstre
>> Skift til høyre

Bitvis OG operatør &

Utgangen fra bitvis AND er 1 hvis de tilsvarende bitene i to operander er 1. Hvis en bit av en operand er 0, blir resultatet av tilsvarende bit evaluert til 0.

La oss anta bitvis OG-operasjon av to heltall 12 og 25.

 12 = 00001100 (i binær) 25 = 00011001 (i binær) bitoperasjon på 12 og 25 00001100 & 00011001 ________ 00001000 = 8 (i desimal)

Eksempel 1: Bitvis OG

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Produksjon

 Utgang = 8

Bitvis ELLER operatør |

Utgangen fra bitvis OR er 1 hvis minst en tilsvarende bit av to operander er 1. I C-programmering betegnes bitvis ELLER operator med |.

12 = 00001100 (i binær) 25 = 00011001 (i binær) bitvis ELLER bruk av 12 og 25 00001100 | 00011001 ________ 00011101 = 29 (i desimal)

Eksempel 2: Bitvis ELLER

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Produksjon

 Utgang = 29

Bitvis XOR-operatør (eksklusiv OR) ^

Resultatet av bitvis XOR-operator er 1 hvis de tilsvarende bitene i to operander er motsatte. Det er betegnet med ^.

 12 = 00001100 (i binær) 25 = 00011001 (i binær) bitvis XOR betjening av 12 og 25 00001100 00011001 ________ 00010101 = 21 (i desimal)

Eksempel 3: Bitvis XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Produksjon

 Utgang = 21

Bitvis komplement operatør ~

Bitvis komplimentoperatør er en unary operatør (fungerer bare på en operand). Den endres 1 til 0 og 0 til 1. Den er betegnet med ~.

 35 = 00100011 (i binær) Bitvis komplement Drift av 35 ~ 00100011 ________ 11011100 = 220 (i desimal) 

Vri bitvis komplementoperatør i C-programmering

Det bitvise komplementet på 35 (~ 35) er -36 i stedet for 220, men hvorfor?

For ethvert heltall n vil bitvis komplement av n være -(n+1). For å forstå dette, bør du ha kunnskap om 2s komplement.

2's komplement

To komplement er en operasjon på binære tall. 2-komplementet til et tall er lik komplementet til det tallet pluss 1. For eksempel:

 Desimal binær 2 komplement 0 00000000 - (11111111 + 1) = -00000000 = -0 (desimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (desimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (desimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desimal) Merk: Overflyt ignoreres mens du beregner komplementet til 2. 

Det bitvise komplementet på 35 er 220 (i desimal). 2-tallet komplement på 220 er -36. Derfor er produksjonen -36 i stedet for 220.

Bitvis komplement av et hvilket som helst tall N er - (N + 1). Dette er hvordan:

 bitvis komplement av N = ~ N (representert i 2s komplementform) 2'komplement av ~ N = - (~ (~ N) +1) = - (N + 1) 

Eksempel 4: Bitvis komplement

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Produksjon

 Utgang = -36 Utgang = 11

Skiftoperatører i C-programmering

Det er to skiftoperatører i C-programmering:

  • Høyre skiftoperatør
  • Venstre skiftoperatør.

Høyre skiftoperatør

Høyre skiftoperatør skifter alle biter mot høyre med et bestemt antall spesifiserte biter. Det er betegnet med >>.

 212 = 11010100 (I binær) 212 >> 2 = 00110101 (I binær) (Høyre skift med to bits) 212 >> 7 = 00000001 (I binær) 212 >> 8 = 00000000 212 >> 0 = 11010100 (Ingen skift) 

Venstre skiftoperatør

Venstre skiftoperatør skifter alle biter mot venstre med et bestemt antall spesifiserte biter. Bitposisjonene som er fraflyttet av venstre skiftoperatør er fylt med 0. Symbolet for venstre skiftoperatør er <<.

 212 = 11010100 (I binær) 212 << 1 = 110101000 (I binær) (Venstre skift med en bit) 212 << 0 = 11010100 (Skift med 0) 212 << 4 = 110101000000 (I binær) = 3392 (I desimal )

Eksempel 5: Skiftoperatører

 #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 

Interessante artikler...