Próbuję wykonać Bitwise NOT na niepodpisanej int w Nodejs / JavaScript. W moim zrozumieniu, każdy operator bitowy odbywa się na podpisanym 32bit całkowitym, co sprawia, że jest dla mnie mylące, gdy chcę to zrobić na niepodpisanej liczbie całkowitej 16-bitowej (krótkiej). To jest to, co chcę zrobić:

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

Jak mogę przekonwertować ostatnią wartość do niepodpisanej 16bit int w Nodejs / JavaScript?

1
FewWords 26 czerwiec 2017, 11:10

3 odpowiedzi

Najlepsza odpowiedź

Możesz po prostu zrobić bitw i uzyskać ten sam wynik:

value = ~value & 0xFFFF;
2
mscdex 26 czerwiec 2017, 08:31

Lub możesz po prostu użyć Uint16array

(new Uint16Array([~41003]))[0] //24532
0
Alex Michailidis 26 czerwiec 2017, 10:22

Możesz użyć maksymalnej wartości liczby 16-bitowej i wykonać BitWise XOR ^.

function not16Bit(v) {
    return ((1 << 16) - 1) ^  v;
}
 
console.log(not16Bit(41003)); // 24532
console.log(not16Bit(24532)); // 41003
0
Nina Scholz 26 czerwiec 2017, 08:31