почему 0x80000000 и 0x80000000 ниже 0 - PullRequest
0 голосов
/ 08 июня 2018

почему в nodejs

0x80000000 & 0x80000000 < 0

но

0x40000000 & 0x40000000 > 0

и если я использую более большой гекс, как 0x800000000

, то будетесть ли скрытые ошибки?

POSTAG.ts


console.log (0x80000000) // => 2147483648

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Крайняя левая цифра 8 в первом случае и 4 во втором. Все от 0-7 положительно, а 8-f отрицательно.Потому что 8 в гексе это 1000, а 4 в гексе это 0100.

0 голосов
/ 08 июня 2018

Это из-за того, как числа представлены в компьютере ( дополнение к двум ).

Шестнадцатеричная цифра 8 является двоичной 1000, поэтому двоичное представление числа врегистр имеет самый левый бит 1 (отрицательный).Шестнадцатеричная цифра 4 равна 0100, поэтому она начинается с 0 (положительное значение).

> 0x80000000
-2147483648
> 0x40000000
1073741824

Она не имеет ничего общего с оператором &, тем более что два AND одинаковые, даютэта вещь снова.

...