Канал (|) оператор в Java

У меня есть этот оператор в Java:

System.out.println(3|4); 

Почему вывод 7?

48
задан Khalil M 21 November 2016 в 17:22
поделиться

7 ответов

Это побитовая операция ИЛИ. Он изменяет вещи на двоичном уровне.

             011                     3
in binary: | 100     in decimal:  |  4
             ___                   ___
             111                     7

Откройте Windows calc в научном режиме. Вы можете переключаться между десятичным и двоичным (и шестнадцатеричным) числами и выполнять побитовые операции, включая или, и, xor и т. Д.

Чтобы выполнять побитовые операции, мысленно или на бумаге, сравните каждую цифру одного и того же порядкового номера. Если какое-либо число равно 1, результат в этом порядковом номере будет 1.

87
ответ дан 7 November 2019 в 12:05
поделиться

Оператор | выполняет «побитовое ИЛИ». Результат побитового ИЛИ для двух битов равен 1, если один из битов равен 1, или 0, если оба бита равны 0. Побитовое ИЛИ для двух чисел просто выполняет побитовое ИЛИ для каждого бита отдельно.

Вот как работает 3 | 4 :

  3:  00000011
  4:  00000100
--------------
3|4:  00000111 = 7
41
ответ дан 7 November 2019 в 12:05
поделиться

Двоичное представление:

 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
9
ответ дан 7 November 2019 в 12:05
поделиться

| - это побитовый оператор или. в 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.

4
ответ дан 7 November 2019 в 12:05
поделиться

Поскольку побитовые операторы могут быть немного запутанными без того, с чем их можно соотнести, я объяснил их функцию даже непрограммистам так: вы просто вычитаете 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
ответ дан 7 November 2019 в 12:05
поделиться

Полезно осознавать, что в основе этого лежит обобщенная система подсчета. Двоичный - это база-2. Знакомая десятичная дробь - десятичная. Восьмеричное разрешение Linux - это основание 8.

Значение числа получается путем сложения индивидуальных значений каждой из его цифр. Для любой цифры значение выводится по простой формуле.

(цифра) * (основание) ^ (количество знаков слева от десятичной точки)

123 = сто двадцать три = (1 * 10 ^ 2) + (2 * 10 ^ 1) + (3 * 10 ^ 0) = 100 + 20 + 3

Я узнал, что в CS211 (не хвастовство, просто вспоминание)

4
ответ дан 7 November 2019 в 12:05
поделиться

Выполняется побитовая операция ИЛИ , а 3 ИЛИ 4 равно 7.

См. Здесь: http://en.wikipedia.org/wiki/Bitwise_OR#OR

10
ответ дан 7 November 2019 в 12:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: