У меня есть это выражение в Java:
System.out.println(3|4);
Почему вывод 7?
У меня есть это выражение в Java:
System.out.println(3|4);
Почему вывод 7?
Это побитовая операция ИЛИ. Он модифицирует объекты на двоичном уровне.
011 3
in binary: | 100 in decimal: | 4
___ ___
111 7
Откройте Windows calc в научном режиме. Вы можете переключаться между десятичным и двоичным (и шестнадцатеричным) и выполнять побитовые операции, включая or, and, xor и т.д.
Чтобы поразмыслить или в голове или на бумаге, сравните каждую цифру того же порядкового номера. Если любое число равно 1, результат в этом порядковом номере будет равен 1.
Оператор |
выполняет "побитовое ИЛИ". Вывод побитового ИЛИ на два бита равен 1, если один бит равен 1 или 0, если оба бита равны 0. Побитовое ИЛИ на двух номерах просто побитовое ИЛИ на каждом бите индивидуально.
Вот как работает 3|4
:
3: 00000011
4: 00000100
--------------
3|4: 00000111 = 7
Выполняет операцию bitwise OR
, а 3 OR
4 - 7.
Смотрите здесь: http://en.wikipedia.org/wiki/Bitwise_OR#OR
Двоичное представление:
3 = 00000011
4 = 00000100
| is bitwise OR operator
когда вы ИЛИ два числа, вы берете двоичное представление, а результат OR - 1 IFF для этого столбца, по крайней мере, один столбец устанавливается true (1)
So
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
| является "побитовым" или "оператором". в | 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.
Полезно понять, что существует обобщенная система подсчета оснований этого. Двоичная база - 2. Знакомым десятичным является основание-10. Для Windows 8-го уровня используется базовая 8.
Числовое значение получается путем сложения отдельных значений каждой из его цифр. Для любой цифры это значение получается из простой формулы.
(цифра) * (база) ^ (количество мест слева от десятичной точки)
123 = сто двадцать три = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3
Я узнал, что в CS211 (не хвастаясь, просто вспоминая)
Поскольку побитовые операторы могут немного запутываться, а не что-то их соотнести, то, как я объяснил их функции не программистам, даже это то, что вы просто подставляете 1 для true и 0 для false, а затем они ведут себя одинаково с операторы на английском языке:
Луна синяя И небо синее, ложно
0 и 1 равно 0
Луна синяя ИЛИ небо синее, истинно
0 или 1 равно 1
но аналогия ломается, когда я добираюсь до:
океан синий XOR деревья зеленые, false