Javascript unsigned short to signed short

Tim*_*sen 3 javascript bytearray

我有以下代码:

var v = [0xFF, 0xFF];
alert((v[0]<<8) | v[1]);
Run Code Online (Sandbox Code Playgroud)

它会提醒65535(最大短值).

如何将此字节数组视为带符号的short,并获取此数组的带符号值.

Arn*_*anc 5

假设高位是符号:

var sign = v[0] & (1 << 7);
var i = ((v[0] & 0x7F) << 8) | v[1];
if (sign) {
    i = -i;
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/p4TQw/1/


如果您使用二进制补码表示:

var i = (((v[0] << 8) | v[1]) << 16) >> 16);
Run Code Online (Sandbox Code Playgroud)

左移16位将所有位向左移动; 并且算术16位右移在移位时处理符号.(Javascript使用32位整数进行移位操作.)

http://jsfiddle.net/p4TQw/3/