C Bitvisa operatörer: AND-, OR-, XOR-, komplement- och skiftoperationer

I denna handledning lär du dig om alla 6 bitvisa operatörer i C-programmering med exempel.

I aritmetisk-logisk enhet (som ligger inom CPU: n) matematiska operationer som: addition, subtraktion, multiplikation och division görs i bitnivå. För att utföra bitnivåoperationer i C-programmering används bitvis operatörer.

Operatörer Betydelse av operatörer
& Bitvis OCH
| Bitvis ELLER
^ Bitvis XOR
~ Bitvis komplement
<< Skift åt vänster
>> Skift åt höger

Bitvis OCH operatör &

Utgången från bitvis OCH är 1 om motsvarande bitar av två operander är 1. Om en bit av en operand är 0, utvärderas resultatet av motsvarande bit till 0.

Låt oss anta bitvis OCH-operation av två heltal 12 och 25.

 12 = 00001100 (i binär) 25 = 00011001 (i binär) bitoperation på 12 och 25 00001100 & 00011001 ________ 00001000 = 8 (i decimal)

Exempel nr 1: Bitvis OCH

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

Produktion

 Utgång = 8

Bitvis ELLER operatör |

Utgången från bitvis OR är 1 om åtminstone en motsvarande bit av två operander är 1. I C-programmering betecknas bitvis ELLER-operatör med |.

12 = 00001100 (i binär) 25 = 00011001 (i binär) bitvis ELLER användning av 12 och 25 00001100 | 00011001 ________ 00011101 = 29 (i decimal)

Exempel 2: Bitvis ELLER

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

Produktion

 Utgång = 29

Bitvis XOR-operatör (exklusiv OR) ^

Resultatet av bitvis XOR-operator är 1 om motsvarande bitar av två operander är motsatta. Det betecknas med ^.

 12 = 00001100 (I binär) 25 = 00011001 (I binär) Bitvis XOR Användning av 12 och 25 00001100 00011001 ________ 00010101 = 21 (I decimal)

Exempel # 3: Bitvis XOR

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

Produktion

 Utgång = 21

Bitvis komplementoperatör ~

Bitvis komplimangoperatör är en unary operatör (fungerar bara på en operand). Den ändras 1 till 0 och 0 till 1. Den betecknas med ~.

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

Vrid i bitvis komplementoperatör i C-programmering

Det bitvisa komplementet på 35 (~ 35) är -36 istället för 220, men varför?

För varje heltal n kommer bitvis komplement av n att vara -(n+1). För att förstå detta bör du ha kunskap om 2: s komplement.

2: s komplement

Two's komplement är en operation på binära tal. 2: s komplement av ett tal är lika med komplementet för det talet plus 1. Till exempel:

 Decimalt binärt 2-komplement 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimal) Obs! Överflöd ignoreras vid beräkning av 2: s komplement. 

Det bitvisa komplementet på 35 är 220 (i decimal). 2: s komplement på 220 är -36. Följaktligen är utdata -36 istället för 220.

Bitvis komplement av valfritt tal N är - (N + 1). Här är hur:

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

Exempel # 4: Bitvis komplement

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

Produktion

 Utgång = -36 Utgång = 11

Skiftoperatörer i C-programmering

Det finns två skiftoperatörer i C-programmering:

  • Höger skiftoperatör
  • Vänster skiftoperatör.

Right Shift-operatör

Höger skiftoperatör flyttar alla bitar åt höger med ett visst antal specificerade bitar. Det betecknas med >>.

 212 = 11010100 (I binär) 212 >> 2 = 00110101 (I binär) (Högerförskjutning med två bitar) 212 >> 7 = 00000001 (I binär) 212 >> 8 = 00000000 212 >> 0 = 11010100 (Ingen förändring) 

Vänster skiftoperatör

Vänster skiftoperatör flyttar alla bitar åt vänster med ett visst antal specificerade bitar. De bitpositioner som har lämnats av vänsterskiftoperatören är fyllda med 0. Symbolen för vänsterskiftoperatören är <<.

 212 = 11010100 (i binär) 212 << 1 = 110101000 (i binär) (vänster skift med en bit) 212 << 0 = 11010100 (skift med 0) 212 << 4 = 110101000000 (i binär) = 3392 (i decimal )

Exempel 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 

Intressanta artiklar...