Bitjift运算符在NodeJS中的无符号短整型

我正在尝试在nodeJS / javascript中的无符号整数上执行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位整数?

你可以做一个按位与得到相同的结果:

 value = ~value & 0xFFFF; 

您可以使用16位数字的最大值并执行按位异或操作 。

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

或者你可以简单地使用Uint16Array

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