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

2021-08-09 22:36:20 字數 1195 閱讀 5467

題目描述:輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

知識點:

1. 左移運算子   

1)格式:value << num ,num 指定要移動的位數。   

2)運算規則:按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。如果移動的位數超過了該型別的最大位數,那麼編譯器會對移動的位數取模。如對int型移動33位,實際上只移動了1位。  

當左移的運算數是int 型別時,每移動1位它的第31位就要被移出並且丟棄;當左移的運算數是long 型別時,每移動1位它的第63位就要被移出並且丟棄;當左移的運算數是byte 和short型別時,將自動把這些型別擴大為 int 型。   

3)數學意義:在數字沒有溢位的前提下,對於正數和負數,左移一位都相當於乘以2的1次方,左移n位就相當於乘以2的n次方   

2、 右移運算子   

1)格式:value >> num,num 指定要移動的位數。

2)運算規則: 按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1   

當右移的運算數是byte 和short型別時,將自動把這些型別擴大為 int 型。

3)數學意義:右移一位相當於除2,右移n位相當於除以2的n次方。

3、無符號右移   

1)格式:value >>> num,num 指定要移動的位數。   

2)運算規則:忽略了符號位擴充套件,0補最高位   

無符號右移運算子》 只是對32位和64位的值有意義

思路一:將這個整數依次進行無符號右移,與1按位與

public class solution 

return count;

}}

思路二:設flag=1,將flag依次左移,與整數按位與

public class solution 

return count;

}}

思路三:最優解

public class solution 

return count;

}}

思路四:將0值去掉,求字串長度

public class solution 

}

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

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

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

1 常見位運算符號 2 常用位運算技巧 3 輸入乙個數求該數的二進位制中1的個數 設定乙個迴圈,迴圈32次 因為int型長度是32位,如果long型就迴圈64,類推 每次讓1左移一位,然後和輸入的數進行與運算 和1進行與運算,結果取決於輸入數的二進位制位,是1結果就是1,0結果就是0 再比較 從後往...

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

題目描述 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。如果乙個整數不為0,那麼這個整數至少有一位是1。如果我們把這個整數減1,那麼原來處在整數最右邊的1就會變為0,原來在1後面的所有的0都會變成1 如果最右邊的1後面還有0的話 其餘所有位將不會受到影響。舉個例子 乙個二進位制數...