輸入乙個非負數,判斷二進位制下該數含有「1」的個數。

2021-10-13 15:21:06 字數 619 閱讀 9214

思路:依次檢查每一位是否有為1,將數的每一位與1進行位與運算,若位運算結果為1則計數器加一。

int

count_1

(int num)

return count;

}

一次遍歷,時間複雜度o(n),使用了常數空間,空間複雜度o(1)

二進位制數若存在1, 對其進行減一操作,會發生以下變化:

此時後面的數都會變為0,我們嘗試計算a&b

得到的是a失去乙個1之後的結果,用這種方式我們能更快的計算出該數中含有1的個數:

int

count_1

(int num)

return count;

}

時間複雜度o(m),m為實際含有1的個數,空間複雜度o(1) 。

JS 二進位制計算,如何得到乙個負數的二進位制表示

題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示 收穫 1.由負數的補碼求他的絕對值補碼 負二進位制數的絕對值,只要各位 包括符號位 取反,再加1,就得到其絕對值。2.負數正碼取反 不包括符號位 1即得到補碼表示 3.js中求二進位制,number tostring 2 負數和...

判斷乙個整數二進位制下1的個數

1.最容易想到的就是 n 1 得到最後一位是不是 1 然後再將 n 1 這樣迴圈 int 32次就可以得到1的個數,但是這樣n為負數時會陷入死迴圈 2.不如換乙個思路設定乙個 i 每次讓i 1這樣就不會對n進行修改,避免了死迴圈 public static int getnum3 int n ret...

判斷乙個二進位制數的正負

計算機中,用二進位制 或者簡寫成十六進製制 表示數,高位為0的數為正數,高位為1的數是負數。例如,int a 0xf48904e,int b 0xf48904e0,long c 0xf80000000l,long d 0xf800000000000000l.其中,a和c是正數,b和d是負數 通過編寫...