C Bitwise-operators: AND-, OR-, XOR-, complement- en shiftbewerkingen

In deze tutorial leer je met voorbeelden over alle 6 bitsgewijze operatoren in C-programmering.

In rekenkundig-logische eenheid (die zich in de CPU bevindt), worden wiskundige bewerkingen zoals: optellen, aftrekken, vermenigvuldigen en delen op bitniveau uitgevoerd. Om bewerkingen op bitniveau in C-programmering uit te voeren, worden bitsgewijze operatoren gebruikt.

Operatoren Betekenis van operators
& Bitwise EN
| Bitsgewijs OF
^ Bitsgewijze XOR
~ Bitsgewijze aanvulling
<< Shift naar links
>> Shift naar rechts

Bitwise AND-operator &

De uitvoer van bitsgewijze AND is 1 als de corresponderende bits van twee operanden 1 is. Als een van de bits van een operand 0 is, wordt het resultaat van de corresponderende bit geëvalueerd naar 0.

Laten we aannemen dat de bitsgewijze EN-bewerking van twee gehele getallen 12 en 25.

 12 = 00001100 (in binair) 25 = 00011001 (in binair) Bitwerking van 12 en 25 00001100 & 00011001 ________ 00001000 = 8 (in decimaal)

Voorbeeld 1: Bitwise AND

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

Uitvoer

 Uitgang = 8

Bitsgewijze OR-operator |

De uitvoer van bitsgewijze OR is 1 als ten minste één corresponderende bit van twee operanden 1 is. In C Programming wordt de bitsgewijze OR-operator aangeduid met |.

12 = 00001100 (In binair) 25 = 00011001 (In binair) Bitgewijs OF Werking van 12 en 25 00001100 | 00011001 ________ 00011101 = 29 (in decimaal)

Voorbeeld 2: Bitwise OR

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

Uitvoer

 Uitgang = 29

Bitwise XOR-operator (exclusief OR) ^

Het resultaat van de bitsgewijze XOR-operator is 1 als de corresponderende bits van twee operanden tegengesteld zijn. Het wordt aangegeven met ^.

 12 = 00001100 (In Binair) 25 = 00011001 (In Binair) Bitwise XOR Werking van 12 en 25 00001100 00011001 ________ 00010101 = 21 (In decimaal)

Voorbeeld 3: Bitwise XOR

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

Uitvoer

 Uitgang = 21

Bitsgewijze complementoperator ~

Bitwise compliment-operator is een unaire operator (werkt op slechts één operand). Het verandert 1 in 0 en 0 in 1. Het wordt aangegeven met ~.

 35 = 00100011 (in binair) Bitsgewijs complement Werking van 35 ~ 00100011 ________ 11011100 = 220 (in decimaal) 

Draai de bitsgewijze complementoperator in C-programmering

Het bitsgewijze complement van 35 (~ 35) is -36 in plaats van 220, maar waarom?

Voor elk geheel getal n zal bitsgewijze complement van n zijn -(n+1). Om dit te begrijpen, moet u kennis hebben van het complement van 2.

2's aanvulling

Two's complement is een bewerking op binaire getallen. Het 2-complement van een getal is gelijk aan het complement van dat getal plus 1. Bijvoorbeeld:

 Decimaal Binair 2-complement 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimaal) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimaal) 12 00001100 - (11110011 + 1) = -11110100 = -244 (decimaal) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimaal) Opmerking: overloop wordt genegeerd tijdens het berekenen van het complement van 2. 

Het bitsgewijze complement van 35 is 220 (in decimaal). Het 2-complement van 220 is -36. De output is dus -36 in plaats van 220.

Bitsgewijs complement van elk getal N is - (N + 1). Hier is hoe:

 bitsgewijze complement van N = ~ N (weergegeven in de complementvorm van 2) 2'complement van ~ N = - (~ (~ N) +1) = - (N + 1) 

Voorbeeld 4: bitsgewijze aanvulling

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

Uitvoer

 Uitgang = -36 Uitgang = 11

Shift Operators in C-programmering

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #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 artikelen...