Вычисление суммы двух отрицательных двоичных чисел в php 7.1 - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь понять, как сделать сложение двух отрицательных чисел в PHP 7.1. Итак, я прочитал эти вопросы в stackeoverflow:

Я тестировал этот скрипт:

<?php 
 echo (~5) + (~7); // output: -14

Но я не понимаю, почему результат -14. Пытаясь решить вручную, я сделал так:

~5 => (1011)
~7 => (1001)

(1011) + (1001) = 0100 => 8 != -14 the output of php script

Где ошибка?

1 Ответ

0 голосов
/ 14 мая 2018

Прочитав несколько примеров на php.net , я обнаружил очень хорошую демонстрацию:

Оператор NOT или дополнения (~) и отрицательные двоичные числа могут сбивать с толку.

~ 2 = -3, потому что вы используете формулу ~ x = -x - 1 Побитовое дополнение десятичного числа - это отрицание числа минус 1.

ПРИМЕЧАНИЕ: только использование 4 битздесь для примеров ниже, но в действительности PHP использует 32 бита.

Преобразование отрицательного десятичного числа (то есть: -3) в двоичное происходит за 3 шага: 1) преобразовать положительную версию десятичного числа в двоичное (то есть: 3 = 0011) 2) переворачивает биты (то есть: 0011 становится 1100) 3) добавляет 1 (то есть: 1100 + 0001 = 1101)

Возможно, вам интересно, как 1101 = -3.Хорошо, PHP использует метод "2'splement" для рендеринга отрицательных двоичных чисел.Если самый левый бит равен 1, то двоичное число отрицательно, и вы переворачиваете биты и добавляете 1. Если оно равно 0, то оно положительно и вам ничего не нужно делать.Таким образом, 0010 будет положительным 2. Если это 1101, оно будет отрицательным, и вы перевернете биты, чтобы получить 0010. Добавьте 1, и вы получите 0011, который равен -3.

source fromphp.net

...