Šioje pamokoje sužinosite apie visus 6 bitų operatorius C programavimo srityje su pavyzdžiais.
Aritmetiniame-loginiame vienete (kuris yra procesoriaus viduje) matematinės operacijos, tokios kaip: susiejimas, atimimas, dauginimas ir dalijimas, atliekamos bitų lygiu. Norėdami atlikti bitų lygio operacijas programuodami C, naudojami bitų operatoriai.
Operatoriai | Operatorių reikšmė |
---|---|
& | Bitais IR |
| | ARBA bitais |
^ | Bitais XOR |
~ | Bitais papildo |
<< | Paspauskite kairę |
>> | Pereiti į dešinę |
Operatyviai ir
AND bitų išvestis yra 1, jei atitinkami dviejų operandų bitai yra 1. Jei bet kuris operando bitas yra 0, atitinkamo bito rezultatas įvertinamas iki 0.
Tarkime, kad dviejų sveikųjų skaičių 12 ir 25 duomenys bus veikiami bitais IR
12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu) 12 ir 25 bitų veikimas 00001100 ir 00011001 ________ 00001000 = 8 (dešimtainiu skaičiumi)
1 pavyzdys: Bitais IR
#include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; )
Rezultatas
Išvestis = 8
ARBA operatorius bitais
OR bitų išvestis yra 1, jei bent vienas atitinkamas dviejų operandų bitas yra 1. C programavimo operacijoje bitų kryptimi OR žymimas |
12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu būdu) Bitais ARBA 12 ir 25 operacijos 00001100 | 00011001 ________ 00011101 = 29 (dešimtųjų tikslumu)
2 pavyzdys: Bitais OR
#include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; )
Rezultatas
Rezultatas = 29
XOR (išskirtinis ARBA) operatorius bitų pavidalu ^
XOR operatoriaus bitų rezultatas yra 1, jei atitinkami dviejų operandų bitai yra priešingi. Tai žymima ^.
12 = 00001100 (dvejetainiu būdu) 25 = 00011001 (dvejetainiu) 12 ir 25 operacijos bitais XOR 00001100 00011001 ________ 00010101 = 21 (dešimtųjų tikslumu)
3 pavyzdys: XOR bitais
#include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )
Rezultatas
Rezultatas = 21
Bitais papildo operatorių ~
„Bitwise“ komplimentų operatorius yra vienarūšis operatorius (veikia tik su vienu operandu). Jis keičiamas nuo 1 iki 0, o nuo 0 iki 1. Jis žymimas ~.
35 = 00100011 (dvejetainiu skaičiumi) Papildoma 35 ~ 00100011 operacija _ ~ ____ 11011100 = 220 (dešimtųjų tikslumu)
„C“ programavimo sistemoje susukite bitų papildymo operatorių
35 (~ 35) bitų papildymas yra -36, o ne 220, bet kodėl?
Bet kuriam sveikam skaičiui n bus n papildinys bitais -(n+1)
. Norėdami tai suprasti, turėtumėte žinoti apie 2 papildymą.
2 papildymas
Two's complement is an operation on binary numbers. The 2's complement of a number is equal to the complement of that number plus 1. For example:
Decimal Binary 2's complement 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) Note: Overflow is ignored while computing 2's complement.
The bitwise complement of 35 is 220 (in decimal). The 2's complement of 220 is -36. Hence, the output is -36 instead of 220.
Bitwise complement of any number N is -(N+1). Here's how:
bitwise complement of N = ~N (represented in 2's complement form) 2'complement of ~N= -(~(~N)+1) = -(N+1)
Example #4: Bitwise complement
#include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; )
Output
Output = -36 Output = 11
Shift Operators in C programming
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