Побитовый & |операторы в восьмеричной системе - PullRequest
0 голосов
/ 02 декабря 2018

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

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

Например, если я сделаю одно из следующих действий:

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 его как восьмеричное после завершения операции?или преобразует его в десятичный (и когда он это делает?).

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

1 Ответ

0 голосов
/ 02 декабря 2018

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

  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 бита, и никакая другая «цифра» не может перезаписать эти «зарезервированные» цифры.

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

...