var signed, unsigned;
unsigned = 187;
signed = unsigned2signed(unsigned); //无符号转有符号
console.log(signed); //-69
function unsigned2signed(unsigned) {
var value = parseInt(unsigned, 10);
if (value > 256)
return value % 256;
var temp = []; //10进制转换为2进制字符串
while (value > 0) {
if (value % 2 != 0) {
temp.push(1);
} else {
temp.push(0);
}
value = parseInt(value / 2);
}
//不足8位再前方做补0操作
temp.reverse();
while (temp.length < 8) {
temp.unshift(0)
}
temp = temp.join('');
var signed = ''; //无符号转有符号字节 取该二进制字符串补码即可
if (temp.substr(0, 1) == 1) { //二进制符号位等于1 则有符号
for (var i = 1; i < temp.length; i++) {
temp.substr(i, 1) == 1 ? signed += 0 : signed += 1;
}
return ('-' + (parseInt(signed, 2) + 1));
} else {
for (var i = 0; i < temp.length; i++) {
signed += temp.substr(i, 1); //源码输出
}
return (parseInt(signed, 2));
}
}