题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
function NumberOf1(n)
{
// write code here
//自己的方法 当时考虑了各种整数转二进制数,二进制数转整数的方法。最后没做出来,对数组和字符串的操作有了更深一步的了解。
//参考方法一 大神级别的做法
//思想:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。
//那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
var count = 0;
while(n){//直至整数变成0
count++;
n = n&(n-1);//在计算机中,数值一律用补码存储。而这里用的是位运算,所以无所谓正数负数。
//因为位运算之前,需要把整数转换成二进制数。
}
return count;
//参考方法二
/*
if(n<0){
n = n>>>0;//get到新技能,该行命令能够获取到负数的补码
}
var res = n.toString(2);
var count = 0;
for(var i = 0; i <res.length; i++){
if(res[i] == 1){
count++;
}
}
return count;
*/
}
字符串是一种特殊的数组:只能进行读的操作,现在才知道,哭晕;
十进制转二进制数toString();
二进制字符串转十进制parseInt();
进制之间转换用法可参考博客:https://blog.youkuaiyun.com/qq_27954643/article/details/83001964