《剑指offer》c++版本 15.二进制中1的个数
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》c++版本 15.二进制中1的个数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如題:
平常開發過程中,遇到求數的每位數字的時候,通常做法是將這個逐位右移,本題目計算整數的二進制中1的個數,通過右移的方式,能夠解決部分問題,但是,這里有個坑,如果整數為負的話,右移后最左邊還是1,如果是循環的話,容易引起死循環。舉個例子:負數0x80000000,右移后不是0x40000000,而是0xC0000000,這是因為,移位后,仍要保證是負數,一直右移,最終得到0XFFFFFFFF,死循環。
為了解決上述問題,我們可以換個方式,上述方式是移位后和1比較,我們不移動數字,而是移動1,這里1左移,對于32位整型,將1左移31次即可,完美避開死循環問題。
下面是本題c++解法:
//使用bit位和數字逐個比較累加 class Solution { public:int NumberOf1(int n) {int cnt = 0, bit = 1;for (int i = 0; i < 32; i++){//將bit左移if (n & (bit << i))cnt++;}return cnt;} };=============================================================================================
Linux應用程序、內核、驅動、后臺開發交流討論群(745510310),感興趣的同學可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。
總結
以上是生活随笔為你收集整理的《剑指offer》c++版本 15.二进制中1的个数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 戴尔电脑主板bios怎么设置 如何设置戴
- 下一篇: 《剑指offer》c++版本 16.数值