Ц Оператори у битовима: И, ИЛИ, КСОР, допуњавање и померање

У овом упутству ћете научити свих 6 битних оператора у програмирању на Ц са примерима.

У аритметичко-логичкој јединици (која је унутар ЦПУ-а), математичке операције попут: сабирања, одузимања, множења и дељења врше се у нивоу битова. За извођење операција на нивоу бита у програмирању на Ц користе се битни оператори.

Оператори Значење оператора
& У битовима И.
|. | У битовима ИЛИ
^ Битно КСОР
~ Битни комплемент
<< Промена улево
>> Промени десно

Битни И оператор &

Излаз битног АНД је 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

Битни КСОР (ексклузивни ИЛИ) оператор ^

Резултат битног КСОР оператора је 1 ако су одговарајући битови два операнда супротни. Означава се са ^.

 12 = 00001100 (у бинарном) 25 = 00011001 (у бинарном) Битно КСОР рад 12 и 25 00001100 00011001 ________ 00010101 = 21 (у децималном)

Пример # 3: Битни КСОР

 #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 (у децималном) 

Уврните битни оператор комплемента у Ц програмирању

Битни комплемент од 35 (~ 35) је -36 уместо 220, али зашто?

За било који цео број н, битни додатак н биће -(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 (у децималу). Додатак двојке од 220 је -36. Дакле, излаз је -36 уместо 220.

Битни комплемент било ког броја Н је - (Н + 1). Ево како:

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

Пример # 4: Битни комплемент

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

Оутпут

 Излаз = -36 Излаз = 11

Оператори смена у програмирању на језику Ц.

У програмирању Ц постоје два оператора смене:

  • Оператер десне смене
  • Оператор леве смене.

Оператер десне смене

Оператор десног помака помера све битове удесно за одређени број назначених битова. Означава се са >>.

 212 = 11010100 (у бинарном) 212 >> 2 = 00110101 (у бинарном) (десни помак за два бита) 212 >> 7 = 00000001 (у бинарном) 212 >> 8 = 00000000 212 >> 0 = 11010100 (без померања) 

Лефт Схифт Оператор

Оператор левог помака помера све битове улево за одређени број назначених битова. Положаји битова које је напустио оператор леве смене попуњавају се са 0. Симбол левог оператора смене је <<.

 212 = 11010100 (у бинарном) 212 << 1 = 110101000 (у бинарном) (леви помак за један бит) 212 << 0 = 11010100 (помак за 0) 212 << 4 = 110101000000 (у бинарном) = 3392 (у децималном) )

Пример # 5: Оператери смене

 #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 

Занимљиви Чланци...