SOURCE

// 2进制的补码,结果为十进制绝对值
function binToComplement(value, length) {
    // 二进制高位补0
    var binVal = (Array(length).join("0") + value).slice(-length);
    // 正数的补码是原码本身
    if(binVal.substring(0, 1) == '0') { 
        return parseInt(binVal, 2);
    }else {
        // 负数的补码为原码取反+1
        var array = binVal.substring(1, length).replace('-',0).split('');
        for(var i=0; i<array.length; i++) {
            array[i] = array[i] == '0' ? '1' : '0';
        }
        return parseInt(array.join(''), 2) + 1;
        // return parseInt(binVal.substring(1, length).replace('-',0).split('').map(bit=>bit=='0'?'1':'0').join(''), 2)+1;
    }
}

// 10进制转16进制
function intToHex(value, length) {
    var number = value.toString(16);
    return (Array(length).join("0") + number).slice(-length);//高位补0
}


var result = binToComplement('11111111111111111111111111001110', 32);
console.log(result * (-1));
console 命令行工具 X clear

                    
>
console