題目
輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。
分析
這是一道考察二進制的題目
二進制或運算符(or):符號爲|,表示若兩個二進制位都爲0,則結果爲0,否則爲1。
二進制與運算符(and):符號爲&,表示若兩個二進制位都爲1,則結果爲1,否則爲0。
二進制否運算符(not):符號爲~,表示對一個二進制位取反。
異或運算符(xor):符號爲^,表示若兩個二進制位不相同,則結果爲1,否則爲0
左移運算符m << n 表示把m左移n位,左移n位的時候,最左邊的n位將被丟棄,同時在最右邊補上n個0,比如:
00001010<<2 = 00101000
右移運算符m >> n 表示把m右移n位,右移n位的時候,最右邊的n位將被丟棄,同時在最左邊補上n個0,比如:
00001010>>2 = 00000010
我們可以讓目標數字和一個數字做與運算
這個用戶比較的數字必須只有一位是1其他位是0,這樣就可以知道目標數字的這一位是否爲0。
所以用於比較的這個數字初始值爲1,比較完後讓1左移1位,這樣就可以依次比較所有位是否爲1。
代碼
function NumberOf1(n)
{
let flag = 1;
let count = 0;
while(flag){
if(flag & n){
count++;
}
flag = flag << 1;
}
return count;
}