У меня есть этот оператор в Java:
System.out.println(3|4);
Почему вывод 7?
Это побитовая операция ИЛИ. Он изменяет вещи на двоичном уровне.
011 3
in binary: | 100 in decimal: | 4
___ ___
111 7
Откройте Windows calc в научном режиме. Вы можете переключаться между десятичным и двоичным (и шестнадцатеричным) числами и выполнять побитовые операции, включая или, и, xor и т. Д.
Чтобы выполнять побитовые операции, мысленно или на бумаге, сравните каждую цифру одного и того же порядкового номера. Если какое-либо число равно 1, результат в этом порядковом номере будет 1.
Оператор |
выполняет «побитовое ИЛИ». Результат побитового ИЛИ для двух битов равен 1, если один из битов равен 1, или 0, если оба бита равны 0. Побитовое ИЛИ для двух чисел просто выполняет побитовое ИЛИ для каждого бита отдельно.
Вот как работает 3 | 4
:
3: 00000011
4: 00000100
--------------
3|4: 00000111 = 7
Двоичное представление:
3 = 00000011
4 = 00000100
| is bitwise OR operator
, когда вы выполняете ИЛИ два числа, вы берете двоичное представление, и результатом ИЛИ является 1 IFF для этого столбца, по крайней мере, для одного столбца устанавливается значение true (1)
Итак,
00000011
00000100
--------
00000111
столбцы сообщают вам значение в этой позиции:
128, 64, 32, 16, 8, 4, 2, 1
поэтому
128, 64, 32, 16, 8, 4, 2, 1
0 , 0, 0, 0, 0, 1, 1, 1
любой столбец с 1 означает, что вы добавляете значение этого столбца:
4 + 2 + 1 = 7
| - это побитовый оператор или. в a | b, если n-й бит a и / или b равен 1, n-й бит результата будет равен 1. 3 - это 11 в двоичном формате. 4 - это 100 в двоичном формате.
0 1 1
or or or
1 0 0
= = =
1 1 1
И 111 является двоичным представлением 7.
Поскольку побитовые операторы могут быть немного запутанными без того, с чем их можно соотнести, я объяснил их функцию даже непрограммистам так: вы просто вычитаете 1 для true и 0 для false, и тогда они ведут себя идентично операторам в английском языке:
the moon is blue AND the sky is blue, is false
0 и 1 - 0
the moon is blue OR the sky is blue, is true
0 или 1 - 1
но аналогия разрушается, когда я дохожу до:
the ocean is blue XOR the trees are green, is false
.Полезно осознавать, что в основе этого лежит обобщенная система подсчета. Двоичный - это база-2. Знакомая десятичная дробь - десятичная. Восьмеричное разрешение Linux - это основание 8.
Значение числа получается путем сложения индивидуальных значений каждой из его цифр. Для любой цифры значение выводится по простой формуле.
(цифра) * (основание) ^ (количество знаков слева от десятичной точки)
123 = сто двадцать три = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3
Я узнал, что в CS211 (не хвастовство, просто вспоминание)
Выполняется побитовая операция ИЛИ
, а 3 ИЛИ
4 равно 7.
См. Здесь: http://en.wikipedia.org/wiki/Bitwise_OR#OR