// 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