Шта су битни оператори?
БИТВИСЕ ОПЕРАТОРИ се користе за манипулацију подацима на нивоу бита, који се називају и програмирање на нивоу бита. Бит-ов делује на једном или више битских образаца или бинарних бројева на нивоу њихових појединачних битова. Користе се у нумеричким прорачунима како би процес израчунавања био бржи.
Следи листа битних оператора које пружа програмски језик 'Ц':
Оператор | Значење |
& | Битни оператор АНД |
|. | | Битни ИЛИ оператор |
^ | Битно ексклузивни ИЛИ оператор |
~ | Бинари Оне'с Цомплемент Оператор је унарни оператер |
<< | Оператор леве смене |
>> | Оператер десне смене |
Битовни оператори се не могу директно применити на примитивне типове података као што су флоат, доубле, итд. Увек запамтите једну ствар да се битни оператори углавном користе са целобројним типом података због његове компатибилности.
Логични логички оператори раде на подацима бит по бит, почевши од најмање значајног бита, тј. ЛСБ бита који је најдеснији бит, радећи према МСБ (најзначајнијем биту) који је крајњи леви бит.
Резултат израчунавања битних логичких оператора приказан је у доњој табели.
Икс | г. | к & и | к | г. | к и |
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
У овом упутству ћете научити-
- Шта су битни оператори?
- У битовима И.
- У битовима ИЛИ
- Битно ексклузивно ИЛИ
- Оператори битног помака
- Оператор битног комплемента
У битовима И.
Ово је један од најчешће коришћених логичких битних оператора. Представљен је једним знаком амперсанда (&). На свакој страни оператора (&) написана су два целобројна израза.
Резултат битне И операције је 1 ако оба бита имају вредност 1; у супротном, резултат је увек 0.
Узмимо у обзир да имамо 2 променљиве оп1 и оп2 са вредностима како следи:
Op1 = 0000 1101Op2 = 0001 1001
Резултат операције АНД на променљивим оп1 и оп2 биће
Result = 0000 1001
Као што видимо, две променљиве се упоређују мало по мало. Кад год је вредност бита у обе променљиве 1, резултат ће бити 1 или 0.
У битовима ИЛИ
Представља се једним знаком вертикалне траке (|). На свакој страни оператора (|) написана су два целобројна израза.
Резултат битне ИЛИ операције је 1 ако бар један од израза има вредност 1; у супротном, резултат је увек 0.
Узмимо у обзир да имамо 2 променљиве оп1 и оп2 са вредностима како следи:
Op1 = 0000 1101Op2 = 0001 1001
Резултат операције ОР на променљивим оп1 и оп2 биће
Result = 0001 1101
Као што видимо, две променљиве се упоређују мало по мало. Кад год је вредност бита у некој од променљивих 1, резултат ће бити 1 или 0.
Битно ексклузивно ИЛИ
Представља се симболом (^). На свакој страни оператора (^) написана су два целобројна израза.
Резултат битне операције Екцлусиве-ОР је 1 ако само један од израза има вредност 1; у супротном, резултат је увек 0.
Узмимо у обзир да имамо 2 променљиве оп1 и оп2 са вредностима како следи:
Op1 = 0000 1101Op2 = 0001 1001
Резултат операције ОР на променљивим оп1 и оп2 биће
Result = 0001 0100
Као што видимо, две променљиве се упоређују мало по мало. Кад год само једна променљива има вредност 1, тада је резултат 0, а 0 ће бити резултат.
Напишимо једноставан програм који демонстрира битне логичке операторе.
#includeint main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}
Излаз:
AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1
Оператори битног помака
Оператори битног помака користе се за померање / померање битних образаца било у леву или у десну страну. Лево и десно су два оператора смене које пружа „Ц“ и који су представљени на следећи начин:
Operand << n (Left Shift)Operand >> n (Right Shift)
Ево,
- операнд је целобројни израз на којем морамо извршити операцију смене.
- 'н' је укупан број позиција битова које морамо померити у целобројном изразу.
Лева операција померања помераће 'н' број битова на леву страну. Искочиће се крајњи леви битови у изразу, а на десној страни ће се попунити н битова са вредношћу 0.
Операција десног помака помераће 'н' број битова на десну страну. Крајњи десни 'н' битови у изразу ће бити искочени, а вредност 0 ће бити попуњена на левој страни.
Пример: к је целобројни израз са подацима 1111. Након извођења операције смене резултат ће бити:
x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011
Оператори смена могу се комбиновати, а затим се могу користити за издвајање података из целобројног израза. Напишимо програм који ће показати употребу оператора битних помака.
#includeint main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}
Излаз:
Left shift - Value of c is 80Right shift - Value of c is 5
Након извођења операције померања улево вредност ће постати 80 чији је бинарни еквивалент 101000.
Након извођења операције десног помака, вредност ће постати 5 чији је бинарни еквивалент 000101.
Оператор битног комплемента
Битни комплемент се назива и нечији оператор комплемента, јер увек узима само једну вредност или операнд. То је унарни оператер.
Када извршимо допуну на било којим битовима, сви 1 постају 0 и обрнуто.
Ако имамо целобројни израз који садржи 0000 1111, тада ће након извођења битске операције комплемента вредност постати 1111 0000.
Битни оператор комплемента означава се симболом тилда (~).
Напишимо програм који показује имплементацију битног оператора комплемента.
#includeint main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}
Излаз:
Complement - Value of c is -11
Ево још једног програма, са примером свих операта о којима смо до сада разговарали:
#includemain() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}
Након што компајлирамо и покренемо програм, он даје следећи резултат:
Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12
Резиме
- Битовни оператори су посебни скупови оператора које пружа „Ц.“
- Користе се у програмирању на нивоу бита.
- Ови оператори се користе за манипулацију битовима целобројног израза.
- Логички, схифт и комплемент су три врсте битних оператора.
- Оператор битног комплемента користи се за обртање битова израза.