首页 > 编程知识 正文

补码表示的二进制计算,二进制如何表示负数

时间:2023-05-04 07:05:06 阅读:245286 作者:4538

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
收获:
1.由负数的补码求他的绝对值补码:负二进制数的绝对值,只要各位(包括符号位)取反,再加1,就得到其绝对值。
2.负数正码取反(不包括符号位)+1即得到补码表示
3.JS中求二进制,(number).toString(2),负数和正数表示除了符号外相同。如(-123).toString(2) == ‘-1111011’, (123).toString(2) == ‘1111011’
原创:4.想得到负数n的二进制表示即补码, 对(Array(32).join(“0”)+(-n-1).toString(2)).slice(-32)按位取反;想得到正数n的二进制表示,(Array(32).join(“0”)+n.toString(2)).slice(-32)即可,不用按位取反。

参考资料:
详解正反补码:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/computercode.html
JS二进制运算http://www.cnblogs.com/ecalf/archive/2012/11/26/2789870.html

function NumberOf1(n){ // write code here //-123的二进制表示为-1111011,123的为1111011,因此首先要得到负数二进制的补码表示 //其后面部分的补码0000101 = 122的正码1111011按位取反, //这个正码加上前面的0即是再全部按位取反即得-123的补码表示 if(n < 0){ n = -n; n = n-1; var str = (Array(32).join("0")+n.toString(2)).slice(-32); str = exchange(str); }else{ var str = (Array(32).join("0")+n.toString(2)).slice(-32); } return cal(str);}//计算1的个数function cal(str){ var sum = 0; for(var i = 0; i < str.length; i++){ if(str[i] == 1){ sum ++; } } return sum;}//如果是负数,0变1,1变0function exchange(str){ var arr = str.split(''); for(var i = 0; i < arr.length; i++){ if(arr[i] == 0){ arr[i] = 1; }else { arr[i] = 0; } } str = arr.join(""); return str;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。