Поразрядные операции можно выполнять только над целыми числами, выполняются действия над двоичным представлением этих чисел.
Операция | Описание |
---|---|
~x |
поразрядное отрицание |
x&y |
поразрядное И |
x|y |
поразрядное ИЛИ |
x^y |
поразрядное исключающее ИЛИ |
x<<y |
сдвиг битов влево: x⋅2y |
x>>y |
сдвиг битов вправо: ⌊x2y⌋ |
Если в операциях сдвига y отрицательный или превышает количество битов в x, то результат операции не определен. При сдвиге вправо отрицательных чисел результат зависит от компьютера, но обычно знаковый бит заполняет разряды: -10>>2 == -3
.
#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
.
unsigned x,i,b;
b=(x>>i)&1; // получить i-й бит
x|=(1u<<i); // установить i-й бит в 1
x&=~(1u<<i); // установить i-й бит в 0