Поразрядные операции можно выполнять только над целыми числами, выполняются действия над двоичным представлением этих чисел.
||.draw||Операция | Описание
--|--
``~x`` | поразрядное отрицание
``x&y`` | поразрядное И
``x\|y`` | поразрядное ИЛИ
``x^y`` | поразрядное исключающее ИЛИ
``x<<y`` | сдвиг битов влево `x*2^y`
``x>>y`` | сдвиг битов вправо `x/{2^y}`
Если в операциях сдвига *y* отрицательный или превышает количество битов в *x*, то результат операции не определен. При сдвиге вправо отрицательных чисел результат зависит от компьютера, но обычно знаковый бит заполняет разряды: ``-10>>2 == -3``.
```run-c
#include <stdio.h>
int main()
{ int a=10,b=9; // a=0b1010, b=0b1001
printf("~a=%d\n",~a);
printf("a|b=%d\n",a|b);
printf("a&b=%d\n",a&b);
printf("a^b=%d\n",a^b);
printf("a<<b=%d\n",a<<b);
printf("a>>b=%d\n",a>>b);
}
```
Для поразрядных операций есть их комбинации с присваиванием: ``x|=y x&=y x^=y x<<=y x>>=y``.
```c
unsigned x,i,b;
b=(x>>i)&1; // получить i-й бит
x|=(1u<<i); // установить i-й бит в 1
x&=~(1u<<i); // установить i-й бит в 0
```