某數二進位制位中1的個數

2021-07-13 10:37:37 字數 1049 閱讀 5932

在求某數的二進位制時,我們通常首先想到的是連除2的方法來求解,對於這道題,我們同樣可以這樣,再利用計數器數出1的個數

#include int count_one_bits( int n)

n=n/2;

} return count;

}int main()

對於這個程式,輸入正數,可以成立,但當輸入負數時,不成立。

因為整形數有32個位元位,所以可以利用for迴圈,查詢一遍整個二進位制序列。在找1的過程中,可以利用&操作符找到1,1&1=1,1&0=0,所以只要讓這個數與1相與,這樣驗證最後一位,並每次右移》(右移運算子,將二進位制位按要求右移,

例 15>>1  --->00000000 

00000000 00000000 

00001111>>

1  ---> 00000000 

00000000

00000000 00000111),保證每一位都找到。

#include int count_one_bits( int n)

} return count;

}int main()

因為移動二進位制位,所以負數也可以。

但此程式不管對於任何數,都是要從第1位到第32位查詢一遍,對於那些32位元位只有少數1的就過於浪費時間了。

so  利用n=n&(n-1)。 例 8  8&7---> 1000 &0111=0000 計算一次 即有1個1,

15   15&14--->1111&1110=1110--->1110&1101=1100--->1100&1011=1000--->1000&0111=0000  3個1

#include int count_one_bits( int n)

return count;

}int main()

這樣就有幾個1,就迴圈幾次。大大的減少了執行時間,提高了效率。

使我們視而不見的光亮,對於我們就是黑暗。  from《瓦爾登湖》

二進位制 二進位制中1的個數

題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...

二進位制數中1的個數

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。思路 在平時的學習中感受不到位運算的精妙,但是在一些演算法處理和效率問題上位運算卻提供了很好的解決方法,畢竟它是立足於二進位制來處理資料的,最底層的也是效率最高的。本題的考察重點也是位運算。通過運算 與運算,每次迴圈 n n n 1 ...

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

題目描述 現在夯夯和朱朱餓了,他們想去吃點東西,他們發現店裡東西的 都是2的次方倍 20,21,22 現在夯夯和朱朱想把他們的的錢全都用掉。想知道他們最少能吃多少東西,最多能吃多少東西?輸入格式 多組樣例,每組樣例佔一行,每行乙個整數,代表他們擁有的總錢數。輸出格式 分別回答他們的問題,答案用空格隔...