Javascript 只有一种数字类型:64 位 float 。
我需要使用 Javascript 实现一个哈希算法,该算法旨在用 C
编写,具有 16 位无符号整数。
主要操作是这样的(伪代码):
uint16 n = 0;
string s = "abcd1234";
for (int i = 0; i < s.length; i += 1) {
n ^= (n << 2) + (n >> 3) + s[i];
}
return n;
当然,当使用 uint16
值时会产生一个结果,如果 n
是 64 位 float ,则会产生不同的结果。
到目前为止,我对该问题的最佳解决方案是使用如下函数 (javascript) 将每个按位运算的结果转换为 <= 16 位:
function uint16 (n) {
return parseInt(n.toString(2).slice(-16), 2);
}
并执行类似这样的操作(javascript):
for (var i = 0; i < s.length; i +=1 ) {
n ^= uint16(uint16(n << 2) + uint16(n >>> 3) + s.charCodeAt(i));
}
但我不是 100% 有信心这将始终产生正确的结果。
是否有任何标准方法可以在 Javascript 中模拟数字值的 16 位无符号按位运算?
最佳答案
您可以使用 bitwise AND .
它对 32 位整数进行操作,但您可以使用 0xffff 进行“与”操作。
function uint16 (n) {
return n & 0xFFFF;
}
此外,移位操作(<<
、>>>
)也对 32 位整数进行操作,所以您只需要调用 uint16
分配前的功能:
for (var i = 0; i < s.length; i +=1 ) {
n ^= uint16((n << 2) + (n >>> 3) + s.charCodeAt(i));
}
关于javascript - Javascript 中的 16 位二进制算术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37773785/