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

2021-09-25 03:11:45 字數 882 閱讀 4930

位運算是把數字用二進位制表示之後,對每一位上0或1的運算。

位運算有五種運算:與、或、異或、左移、右移。

例如:10001010 << 3 = 01010000

如果數字是乙個無符號數值,則用0填補最左邊的 n 位;

如果數字是乙個有符號數值,則用數字的符號位填補最左邊的 n 位。

例如:00001011 >> 2 = 00000010

10001010 >>2 = 11100010

例題:二進位制中1的個數

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

常規解法:先判斷該整數二進位制表示中最右邊位是不是1,接著把輸入的整數右移一位,此時原來處於從右邊數起的第二位被移到最右邊了,再繼續判斷最右邊位是不是1;這樣每次移動一位,直到整個整數變成0為止。

int numberof1(int n)

n = n >> 1; //原來處於從右邊數起的第二位被移到最右邊

}return count;

}

但是這樣的演算法可能會引起死迴圈,當該整數為負數時,並不是簡單的將最高位的1移到第二位,而是仍要保證移位後是乙個負數,即移位後的數最高位還是1。

優秀解法:把乙個整數減去1,再和原整數做與運算,會把該整數最右邊的1變成0;那麼乙個整數的二進位制中有多少個1,就可以進行多少次這樣的操作。

int numberof1(int n)

return count;

}

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

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

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

位運算 是把數字用二進位制表示之後,對每一次是0或1的運算。乘除效率低,實際程式設計中盡可能的用移位運算代替乘除法。世界上有10中人,一種人知道二進位制,而另一種人不知道二進位制 五種位運算 與 或 異或 左移和右移,分別對應 異或 相同為0,相異為1。左移運算子m左移n,表示把m左移n位,最左邊的...

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

給定乙個長度為n的數列,請你求出數列中每個數的二進位制表示中1的個數。輸入格式 第一行包含整數n。第二行包含n個整數,表示整個數列。輸出格式 共一行,包含n個整數,其中的第 i 個數表示數列中的第 i 個數的二進位制表示中1的個數。資料範圍 1 n 100000,0 數列中元素的值 109 輸入樣例...