Javascript без подписи короткой подписи короткой - PullRequest
3 голосов
/ 18 сентября 2011

У меня есть следующий код:

var v = [0xFF, 0xFF];
alert((v[0]<<8) | v[1]);

И он предупреждает 65535 (максимальное короткое значение).

Как я могу обработать этот байтовый массив как подписанное короткое и получитьзначение этого массива со знаком.

1 Ответ

5 голосов
/ 18 сентября 2011

Предполагая, что старший бит является знаком:

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

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


Если вы используете дополняют два представление:

var i = (((v[0] << 8) | v[1]) << 16) >> 16);

16-битный сдвиг влево перемещает все биты влево; а арифметическое 16-битное правое смещение заботится о знаке при смещении. (Javascript использует 32-битные целые числа для операций сдвига.)

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

...