我正在编写一种用JavaScript编写的CRC32算法,这是我的新手. 直到最后一步:将校验和与0xFFFFFFFF进行XOR运算之前,一切似乎都很顺利.
1001010100111101101100010001000
^ 11111111111111111111111111111111 = -1001010100111101101100010001001
1251924104 ^ 4294967295 = -1251924105
负值似乎是个问题.我能做些什么来解决这个问题?
我正在编写一种用JavaScript编写的CRC32算法,这是我的新手. 直到最后一步:将校验和与0xFFFFFFFF进行XOR运算之前,一切似乎都很顺利.
1001010100111101101100010001000
^ 11111111111111111111111111111111 = -1001010100111101101100010001001
1251924104 ^ 4294967295 = -1251924105
负值似乎是个问题.我能做些什么来解决这个问题?
Java脚本中的按位运算将把一个数字转换成一个带符号的32位整数,最大值为2^31-1
.您的号码是0xFFFFFFFF
,是2^32-1
.
但是,如果您改用BigInts,它将工作得很好:
console.log(0xFFFFFFFF ^ 0)
console.log(String(0xFFFFFFFFn ^ 0n))
注意:我不得不使用String()
,因为stackoverflow console.log函数似乎不能处理BigInts.