Побитовая маска ИЛИ дает неожиданное отрицательное число - PullRequest
0 голосов
/ 28 апреля 2018

Я экспериментирую с побитовыми операторами в javascript в попытке получить интуицию. Я хочу ввести два 32-битных двоичных литерала, ИЛИ их вместе, и вывести результат в двоичном формате. Принимая во внимание случай 4-битного аналога моего кода ниже, я бы ожидал, что ORing вместе 0b1000 и 0b0100 даст 1100. И действительно, это так! Однако, когда я запускаю программу ниже, я получаю -1000000000000000000000000000000. Я знаю достаточно о javascript, чтобы подозревать, что проблема, возможно, связана с тем фактом, что язык обрабатывает свои 64-битные числа с плавающей запятой двойной точности как 32-битные порции (если я могу их так называть?), Однако я не могу легко связать эту основную реальность с любопытным поведением кода ниже. Есть мысли?

let initial = 0b10000000000000000000000000000000;
let orMask = 0b01000000000000000000000000000000;
console.log(initial.toString(2));
console.log(orMask.toString(2));
console.log((initial | orMask).toString(2));
...