Go和Javascript关于0xFFFFFFFF ^ 97有什么区别

时间:2019-06-17 07:39:57

标签: javascript node.js go math

我想将Go代码更改为Javascript代码,但是关于结果的一个错误是Go和Javascript不同。 我想将javascript的结果更改为与Go的结果相同(0xFFFFFFFF ^ 97)

我尝试对其进行调试,并且我发现Go中的0xFFFFFFFF ^ 97是4294967198,而在javascript中是-98。

在Go中:

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

在Java语言中:

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

0xFFFFFFFF ^ 97在Go和Javascript中是不同的结果

1 个答案:

答案 0 :(得分:4)

在JavaScript中,按位操作(^是按位XOR)将带符号的数字转换为32位整数,然后返回为双精度。因此,在执行XOR操作后,该数字将转换回其默认类型-IEEE-754双精度二进制数字-然后给出结果。

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

GoLang使用无符号整数(GoLang spec),或者使用icza指出的int64数字。