C Побитови оператори: И, ИЛИ, XOR, операции за допълване и смяна

В този урок ще научите за всички 6 битови оператора в програмирането на C с примери.

В аритметично-логическата единица (която е в рамките на процесора), математически операции като: събиране, изваждане, умножение и деление се извършват на битово ниво. За извършване на операции на битово ниво при програмиране на С се използват битови оператори.

Оператори Значение на операторите
& Побитово И
| Побитово ИЛИ
^ Побитово XOR
~ Побитово допълнение
<< Преместете наляво
>> Преместете надясно

Побитово И оператор &

Изходът на битовото И е 1, ако съответните битове на два операнда са 1. Ако някой от битовете на операнда е 0, резултатът от съответния бит се оценява на 0.

Да предположим битовата И операция на две цели числа 12 и 25.

 12 = 00001100 (в двоична) 25 = 00011001 (в двоична) битова операция на 12 и 25 00001100 & 00011001 ________ 00001000 = 8 (в десетична)

Пример # 1: Побитово И

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

Изход

 Изход = 8

Побитови ИЛИ оператор |

Изходът на битово ИЛИ е 1, ако поне един съответстващ бит от два операнда е 1. При програмиране на С битовият оператор ИЛИ се обозначава с |.

12 = 00001100 (в двоично) 25 = 00011001 (в двоично) Побитово ИЛИ Операция на 12 и 25 00001100 | 00011001 ________ 00011101 = 29 (в десетични знаци)

Пример # 2: Побитово ИЛИ

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

Изход

 Изход = 29

Побитов XOR (изключителен ИЛИ) оператор ^

Резултатът от битовия XOR оператор е 1, ако съответните битове на два операнда са противоположни. Обозначава се с ^.

 12 = 00001100 (в двоично) 25 = 00011001 (в двоично) Побитово XOR Операция на 12 и 25 00001100 00011001 ________ 00010101 = 21 (в десетично)

Пример # 3: Побитов XOR

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

Изход

 Изход = 21

Оператор на битово допълнение ~

Побитовият оператор на комплименти е унарен оператор (работи само на един операнд). Той променя 1 на 0 и 0 на 1. Обозначава се с ~.

 35 = 00100011 (в двоичен) Побитово допълнение Операция на 35 ~ 00100011 ________ 11011100 = 220 (в десетичен знак) 

Завъртете оператор за битово допълнение в програмирането на C

Побитовото допълнение на 35 (~ 35) е -36 вместо 220, но защо?

За всяко цяло число n битовото допълнение на n ще бъде -(n+1). За да разберете това, трябва да имате знанието за допълнението на 2.

Допълнение 2

Допълнението на две е операция върху двоични числа. Допълнението на 2 към число е равно на допълнението на това число плюс 1. Например:

 Десетично двоично допълнение 2 0 00000000 - (11111111 + 1) = -00000000 = -0 (десетично) 1 00000001 - (11111110 + 1) = -11111111 = -256 (десетично) 12 00001100 - (11110011 + 1) = -11110100 = -244 (десетичен) 220 11011100 - (00100011 + 1) = -00100100 = -36 (десетичен) Забележка: Преливането се игнорира, докато се изчислява допълнението 2. 

Побитовото допълнение на 35 е 220 (в десетични знаци). Допълнението от 2 на 220 е -36. Следователно изходът е -36 вместо 220.

Побитово допълнение на произволно число N е - (N + 1). Ето как:

 битово допълнение на N = ~ N (представено във формата на комплемента на 2) 2'допълнение на ~ N = - (~ (~ N) +1) = - (N + 1) 

Пример # 4: Побитово допълнение

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

Изход

 Изход = -36 Изход = 11

Оператори на смяна в програмиране на C

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 

Интересни статии...