В чем разница между Go и Javascript относительно 0xFFFFFFFF ^ 97 - PullRequest
1 голос
/ 17 июня 2019

Я хочу изменить код Go на код Javascript, но есть одна ошибка в результате, которая отличается между Go и Javascript. Я хочу изменить результат javascript на результат Go (0xFFFFFFFF ^ 97)

Я пытаюсь его отладить и узнаю, что 0xFFFFFFFF ^ 97, в Go это 4294967198, но в javascript это -98.

На ходу:

number1 := 0xFFFFFFFF
number2 := 97
fmt.Print(number1 ^ number2) // 4294967198 

В JavaScript:

var number1 = 0xFFFFFFFF
var number2 = 97
console.log(number1 ^ number2) // -98

0xFFFFFFFF ^ 97 - это другой результат в Go и Javascript

1 Ответ

4 голосов
/ 17 июня 2019

В JavaScript побитовая операция (^ - битовое XOR) преобразует числа со знаком 32-битное целое, а затем обратно в двойное число. Таким образом, после выполнения операции XOR число преобразуется обратно в тип по умолчанию - двоичное число двойной точности IEEE-754 - и затем дается результат.

number -> 32-bit signed integer -> bitwise operation -> IEEE-754 double-precision binary number

GoLang использует целые числа без знака ( Спецификация GoLang ) или, как указано icza , int64 числа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...