js 10进制转16进制 原码、反码、补码

 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};   
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容