Обычно в языках программирования предусмотрены так называемые логические побитовые операции. Они выполняются не над самими числами, а над их двоичным представлением. Например, число 5 в двоичной системе счисления выражается как 101, а число 6 — как 110. Выполняя логическую побитовую операцию «И» получим число 4, т.к. в младшим разряде числа 5 стоит 1, а числа 6 — 0. Выражение «1 и 0» возвращает 0. Продолжая поразрядно выполнять логическое «И» в среднем разряде получим 0, а в старшем 1. Можно записать так:
101
110
100
Двоичное число 100 — это десятичное число 4.
Выполним операцию побитового логического «ИЛИ»:
101
110
111 — это число 7.
«Исключающее ИЛИ»:
101
110
011 — это число 3.
При сдвиге биты просто сдвигаются на указанное количество ячеек в освободившиеся ячейки дописываются нули или единицы (это зависит от ряда причин):
110 << 2 = 11000 (число 24),
110 >> 2 = 001 (число 1).
Pascal
битовые операции паскаль
var
a, b: byte;
begin
a := 5;
b := 6;
writeln('a=', a);
writeln('b=', b);
writeln('a and b = ', a and b);
writeln('a or b = ', a or b);
writeln('a xor b = ', a xor b);
writeln('b shl 2 = ', b shl 2);
writeln('b shr 2 = ', b shr 2);
end.
a=5
b=6
a and b = 4
a or b = 7
a xor b = 3
b shl 2 = 24
b shr 2 = 1
В Паскале обычные логические операции и побитовые обозначаются одинаково. Первые применяются, если операнды имеют булевый тип (они получаются в результате простых логических операций >, < и др.), а вторые - если операнды представляют собой целые числа (неважно какого типа).
Язык Си
#include
main() {
int a, b;
a = 5;
b = 6;
printf("%d & %d = %d\n", a, b, a & b);
printf("%d | %d = %d\n", a, b, a | b);
printf("%d ^ %d = %d\n", a, b, a ^ b);
printf("%d << 2 = %d\n", b, b << 2);
printf("%d >> 2 = %d\n", b, b >> 2);
}
5 & 6 = 4
5 | 6 = 7
5 ^ 6 = 3
6 << 2 = 24
6 >> 2 = 1
Python
битовые операции python
a = 5
print("%d = %s" % (a, bin(a)))
b = 6
print("%d = %s" % (b, bin(b)))
print("%d & %d = %d (%s)" % (a,b,a&b,bin(a&b)))
print("%d | %d = %d (%s)" % (a,b,a|b,bin(a|b)))
print("%d ^ %d = %d (%s)" % (a,b,a^b,bin(a^b)))
print("%d << 2 = %d (%s)" % (b,b<<2,bin(b<<2)))
print("%d >> 2 = %d (%s)" % (b,b>>2,bin(b>>2)))
5 = 0b101
6 = 0b110
5 & 6 = 4 (0b100)
5 | 6 = 7 (0b111)
5 ^ 6 = 3 (0b11)
6 << 2 = 24 (0b11000)
6 >> 2 = 1 (0b1)
Basic-256
a = 5
b = 6
print "5 & 6 = " + (a&b)
print "5 | 6 = " + (a|b)
5 & 6 = 4
5 | 6 = 7
Из битовых операторов в Basic-256 нашлись только "И", "ИЛИ" и отрицание. Исключающего "ИЛИ", а также сдвигов нет.