从二进制带符号的 2 的补码中获取小数
Getting decimal from binary's signed 2's complement
我正在尝试获取二进制有符号 2 的补码的十进制数(如果它适用)。
下面是我尝试的方法。
function getSignedInteger(bits) {
for (var i = 0; i < bits.length; i++) {
bits[i]
}
let negative = (bits[0] === '1');
console.log(bits[0] === '1')
if (negative) {
let inverse = '';
for (let i = 0; i < bits.length; i++) {
inverse += (bits[i] === '0' ? '1' : '0');
}
console.log(inverse)
return (parseInt(inverse, 2) + 1) * -1;
} else {
return parseInt(bits, 2);
}
}
输入 : ['10100100','11100001','11001','100000','100001','101010','1000111','11011000', '1010011','1011000','10111011','10000110','10111010','1110101','1111','110111']
输出:
[-92, -31, 25, 32, 33, 42, 71, -40, 83, 88, -69, -122, -70, 117, 15, 55]
我得到了什么
[-92、-31、-7、-32、-31、-22、-57、-40、-45、-40、-69、-122、-70、-11、-1、-9]
您可以添加一个检查值,它在第一位有符号位,然后取
- 解析值与256的差值,或者
- 解析后的数字。
function getSignedInteger(bits) {
var value = parseInt(bits, 2);
return value & (1 << 7)
? value - (1 << 8)
: value;
}
console.log(...['10100100', '11100001', '11001', '100000', '100001', '101010', '1000111', '11011000', '1010011', '1011000', '10111011', '10000110', '10111010', '1110101', '1111', '110111'].map(getSignedInteger));
我正在尝试获取二进制有符号 2 的补码的十进制数(如果它适用)。
下面是我尝试的方法。
function getSignedInteger(bits) {
for (var i = 0; i < bits.length; i++) {
bits[i]
}
let negative = (bits[0] === '1');
console.log(bits[0] === '1')
if (negative) {
let inverse = '';
for (let i = 0; i < bits.length; i++) {
inverse += (bits[i] === '0' ? '1' : '0');
}
console.log(inverse)
return (parseInt(inverse, 2) + 1) * -1;
} else {
return parseInt(bits, 2);
}
}
输入 : ['10100100','11100001','11001','100000','100001','101010','1000111','11011000', '1010011','1011000','10111011','10000110','10111010','1110101','1111','110111']
输出: [-92, -31, 25, 32, 33, 42, 71, -40, 83, 88, -69, -122, -70, 117, 15, 55]
我得到了什么 [-92、-31、-7、-32、-31、-22、-57、-40、-45、-40、-69、-122、-70、-11、-1、-9]
您可以添加一个检查值,它在第一位有符号位,然后取
- 解析值与256的差值,或者
- 解析后的数字。
function getSignedInteger(bits) {
var value = parseInt(bits, 2);
return value & (1 << 7)
? value - (1 << 8)
: value;
}
console.log(...['10100100', '11100001', '11001', '100000', '100001', '101010', '1000111', '11011000', '1010011', '1011000', '10111011', '10000110', '10111010', '1110101', '1111', '110111'].map(getSignedInteger));