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

I denne vejledning lærer du om alle 6 bitvise operatorer i C-programmering med eksempler.

I aritmetisk-logisk enhed (som er inden for CPU'en) udføres matematiske operationer som: addition, subtraktion, multiplikation og division i bitniveau. For at udføre bitniveauoperationer i C-programmering bruges bitvise operatorer.

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

Bitvis OG operatør &

Outputtet fra bitvis AND er 1, hvis de tilsvarende bits i to operander er 1. Hvis en bit i en operand er 0, evalueres resultatet af den tilsvarende bit til 0.

Lad os antage, at den bitvise OG-operation af to heltal 12 og 25 er.

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

Eksempel # 1: Bitvis OG

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

Produktion

 Output = 8

Bitvis ELLER operatør |

Outputtet fra bitvis OR er 1, hvis mindst en tilsvarende bit af to operander er 1. I C-programmering betegnes bitvis ELLER-operator med |.

12 = 00001100 (i binær) 25 = 00011001 (i binær) bitvis ELLER betjening af 12 og 25 00001100 | 00011001 ________ 00011101 = 29 (i decimal)

Eksempel 2: Bitvis ELLER

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

Produktion

 Output = 29

Bitwise XOR-operatør (eksklusiv OR) ^

Resultatet af bitvis XOR-operator er 1, hvis de tilsvarende bits i to operander er modsatte. Det er betegnet med ^.

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

Eksempel 3: Bitvis XOR

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

Produktion

 Output = 21

Bitvis komplement operatør ~

Bitvis komplimentoperatør er en unar operatør (fungerer kun på en operand). Det ændres 1 til 0 og 0 til 1. Det betegnes med ~.

 35 = 00100011 (i binær) Bitvis komplement Betjening af 35 ~ 00100011 ________ 11011100 = 220 (i decimal) 

Drej bitvis komplement operatør i C programmering

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

For ethvert heltal n vil bitvis komplement af n være -(n+1). For at forstå dette, skal du have viden om 2's komplement.

2's komplement

To komplement er en operation på binære tal. 2'ens komplement af et tal er lig med komplementet af det tal plus 1. For eksempel:

 Decimalt binært 2-supplement 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) Bemærk: Overløb ignoreres under beregning af 2's komplement. 

Det bitvise komplement på 35 er 220 (i decimal). 2's komplement på 220 er -36. Derfor er output -36 i stedet for 220.

Bitvis komplement af ethvert tal N er - (N + 1). Sådan gør du:

 bitvis komplement af N = ~ N (repræsenteret i 2's komplementform) 2'komplement af ~ N = - (~ (~ N) +1) = - (N + 1) 

Eksempel 4: Bitvis komplement

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

Produktion

 Output = -36 Output = 11

Skiftoperatører i C-programmering

Der er to skiftoperatører i C-programmering:

  • Højre skiftoperatør
  • Venstre skiftoperatør.

Højre skiftoperatør

Højre skiftoperatør skifter alle bits mod højre med et bestemt antal specificerede bits. Det er betegnet med >>.

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

Venstre skiftoperatør

Venstre skiftoperatør skifter alle bits mod venstre med et bestemt antal specificerede bits. Bitpositionerne, der er fraflyttet af venstre skifteoperatør, udfyldes med 0. Symbolet for venstre skiftoperatør er <<.

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

Eksempel nr. 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...