1的個數 位運算

2021-10-05 12:34:25 字數 1216 閱讀 9935

題目描述

輸入乙個int型的正整數,計算出該int型資料在記憶體中儲存時1的個數。

輸入

輸入乙個整數(int型別)。

輸出

這個數轉換成2進製後,輸出1的個數。

樣例輸入

5樣例輸出

2題目分析:

題目要求求出十進位制數轉化為二進位制數後1的個數,我們可以用很多方法求出,具體如下

最簡單的方法就是對n位二進位制數進行逐位檢查,那麼需要檢查n次

還有乙個更快的方法,就是可以直接定位二進位制中1的位置,跳過中間的0,這是乙個神奇的操作,也就是位運算——kk=kk&(kk-1),它的功能是消除二進位制的最後乙個1,連續進行這個操作,每次消除乙個1,直到全部消除為止,操作次數就是1的個數。

ac**

#include

using

namespace std;

intmain()

printf

("%d\n"

, ans);}

return0;

}

另外附上大佬的**也是用的二進位制操作,相比之下,大佬的**就很容易接受,也很容易理解,先普及一下一些位運算的操作符(只限本題)

n&1就是n%2==1

n>>=1就是n/=2

#include

#define ll long long

using

namespace std;

const

int maxn=

1e5+5;

intmain()

printf

("%d\n"

,ans)

;return0;

}

最美好的大概還是那些初識的日子,是對彼此不全然地了解又極度渴望了解的那段時光—————————————————————————僅此紀念曾經失去的人

附上乙個甜甜的故事,故事很長,還請慢慢品嚐~

LeetCode 位1的個數(位運算)

include using namespace std class solution return result 方法2 o m m為n的二進位制的位數 減1操作將最右邊的符號從0變到1,從1變到0,與操作將會移除最右端的1。如果最初n有x個1,那麼經過x次這樣的迭代運算,n將減到0。inthamm...

leetcode 191 位1的個數(位運算)

題目 編寫乙個函式,輸入是乙個無符號整數,返回其二進位制表示式中數字位數為 1 的個數 也被稱為漢明重量 示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 00000000000000000000000000001011 中,共有三位...

二進位制中1的個數 (位運算)

題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。知識點 1.左移運算子 1 格式 value num num 指定要移動的位數。2 運算規則 按二進位制形式把所有的數字向左移動對應的位數,高位移出 捨棄 低位的空位補零。如果移動的位數超過了該型別的最大位數,那麼編譯器會對...