Побитовый & amp; | операторы в восьмеричной системе

Я понимаю как побитовый оператор & а также | работать для двоичных чисел. Однако я запутался в том, как они работают с восьмеричными числами.

Система сначала преобразовывает число в двоичное, а затем выполняет операцию, а затем преобразовывает обратно в восьмеричное? Или это переменная?

Например, если я сделаю один из этих:

echo decoct( 0400 & 0500 | 0000 );
echo decoct( 0600 & 0500 | 0000 );

я получил 400 в результате.

Однако, если я сделаю:

echo decoct( 0400 & 0500 | 0100 );
echo decoct( 0600 & 0500 | 0100 );

я получил 500 в обоих случаях.

Кроме того, я видел код, где побитовая операция в PHP без использования decoct вокруг него. Сохраняет ли PHP его как восьмеричное после завершения операции? или преобразует его в десятичную (и когда он это делает?).

Пожалуйста, направьте меня в правильном направлении к тому, что изучать и научиться понимать восьмеричные (и десятичные и другие) побитовые операции.

0

Решение

Битовые операторы «к счастью» работают для двоичных, восьмеричных и шестнадцатеричных представлений ваших значений / переменных. В конце они все будут работать на двоичном уровне ваших значений / переменных. Группировка ваших цифр / битов идеально подходит для побитовых операторов.

  0400 = 0b100000000 = 0x100 (0001 0000 0000)
& 0500 = 0b101000000 = 0x140 (0001 0100 0000)
----------------------------
0400 = 0b100000000 = 0x100 (0001 0000 0000)
| 0100 = 0b001000000 = 0x040 (0000 0100 0000)
----------------------------
0500 = 0b101000000 = 0x140 (0001 0100 0000)

И для другого выражения:

  0600 = 0b110000000 = 0x180 (0001 1000 0000)
& 0500 = 0b101000000 = 0x140 (0001 0100 0000)
----------------------------
0400 = 0b100000000 = 0x100 (0001 0000 0000)
| 0100 = 0b001000000 = 0x040 (0000 0100 0000)
----------------------------
0500 = 0b101000000 = 0x140 (0001 0100 0000)

Это работает для этих представлений, потому что «цифра» всегда будет использовать 1, 3 или 4 бита, и никакая другая «цифра» не может перезаписать эти «зарезервированные» цифры.

Побитовые операции выполняются над битами значений (отсюда и имя). Представление / отображение значений не имеет значения для побитовых операций.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector