劍指offer-11-二進制中1的個數
阿新 • • 發佈:2018-09-16
操作 負數 其中 off offer HERE ber class return
題目描述
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。
題目分析
原碼、反碼、補碼的基本概念:①正整數:符號位為0,原碼=反碼=補碼;②負整數:符號位為1,反碼(符號位不變,其他位數值求反),補碼(符號位不變,反碼最低位+1)。具體講解參考此博文。
方法一:將數據分別與flag(即1,10,100,1000...)與操作,可以計算有多少個1,需要計算32次
方法二:將n與n-1與操作,假設8(1000)與7(111)=0,直接計算停止,一個1;若是7(111)與6(110)=(110)(count=1)還需繼續計算,6(110)與5(101)=4(100)(count=2)還需繼續計算,4(100)與3(11)=0(count=3)無需計算,有多少個1就計算多少次
代碼
方法一
function NumberOf1(n)
{
// write code here
var count = 0,flag=1;
while(flag){
if(n&flag)count++;
flag=flag<<1;
}
return count;
}
方法二
function NumberOf1(n) { // write code here var count = 0; while(n){ n=n&(n-1); count++; } return count; }
劍指offer-11-二進制中1的個數