NodeJS中无符号短路的Bitshift运算符

时间:2017-06-26 08:10:23

标签: javascript node.js

我正在尝试在nodeJS / javascript中对unsigned int执行Bitwise NOT。在我的理解中,每个按位运算符都是在一个有符号的32位整数上完成的,当我想在无符号的16位整数(短)上进行操作时,这会让我感到困惑。这就是我想要做的事情:

c#
ushort value = 41003;
value = (ushort)~value;
//Value is now 24532 which is correct

nodeJS
var value = 41003;
value = ~value;
//value is now -41004 wich is NOT correct

如何在nodeJS / javascript中将最后一个值转换为无符号16位int?

3 个答案:

答案 0 :(得分:2)

您可以按位进行AND以获得相同的结果:

value = ~value & 0xFFFF;

答案 1 :(得分:0)

您可以使用16位数的最大值并执行bitwise XOR ^



function not16Bit(v) {
    return ((1 << 16) - 1) ^  v;
}
 
console.log(not16Bit(41003)); // 24532
console.log(not16Bit(24532)); // 41003
&#13;
&#13;
&#13;

答案 2 :(得分:0)

或者你可以简单地使用Uint16Array

(new Uint16Array([~41003]))[0] //24532