1、二进制的最高位(最左边)是符号位。0表示正数,1表示负数。
2、正数的原码、补码、反码都是一样的。
3、负数的反码 = 原码符号位不变,其他位取反。
4、负数的补码 = 反码 + 1 。
5、0的反码、补码都是0。
6、在线网址 https://www.23bei.com/tool/56.html
demo(45612313);
// code-原码 fCode- 反码 bCode - 补码
function demo(val){
if(!val||isNaN(val)) return null;
let copyCode = Math.abs(val);
let code_2 = copyCode.toString(2).padStart(32,"0"); //转为32位2进制
let code="";
if(val>=0){
let code_10 = parseInt(code_2,2);
code = code_10.toString(16).padStart(8,"0");
return {code,fCode:code,bCode:code};
}
code_2 ="1"+code_2.slice(1); //负数首位替换为1
code = parseInt(code_2,2).toString(16); //转为16进制 先转10进制在转16进制
let arr = code_2.split('');
arr.map((item,index)=> {
arr.splice(index,1,Math.abs(item-1)); //反转
});
arr[0]="1";
let fCode2 = arr.join("");
let c10 = parseInt(fCode2,2); //转为十进制
let fCode = c10.toString(16);
let bCode = (c10+1).toString(16); //补码+1
return {code,fCode,bCode};
}