从二进制补码得到十进制数

4

我正在尝试获取二进制的有符号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]


1
你有一些例子吗? - Nina Scholz
@NinaScholz 是的, 我提供的输入是: `['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] - Prashant Kumar Sharma
1个回答

4

你可以添加一个检查值的符号位是否在第一位的条件并选择

  • 解析后的值与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));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接