JAVA中常用的二進位制位操作

2021-08-28 06:15:25 字數 1293 閱讀 8080

一,計算某個正數的二進位制表示法中 1 的個數

1     //求解正數的二進位制表示法中的 1 的位數

2 private static int countbit(int num)

8 return count;

9 }

演算法思路:每次for迴圈,都將num的二進位制中最右邊的 1 清除。

為什麼n &= (n – 1)能清除最右邊的1呢?因為從二進位制的角度講,n相當於在n - 1的最低位加上1。舉個例子,8(1000)= 7(0111)+ 1(0001),所以8 & 7 = (1000)&(0111)= 0(0000),清除了8最右邊的1(其實就是最高位的1,因為8的二進位制中只有乙個1)。再比如7(0111)= 6(0110)+ 1(0001),所以7 & 6 = (0111)&(0110)= 6(0110),清除了7的二進位制表示中最右邊的1(也就是最低位的1)。

參考:演算法-求二進位制數中1的個數

二,獲取某個數的第 i 位(判斷某個數的第 i 位是0 還是 1?)

思路:如果第 i 位 與 1 相與 結果為1 表明第 i 位為1;如果為0 表明第 i 位為0

//獲取 整數 num 的第 i 位的值

private static boolean getbit(int num, int i)

1 左移 i 位後,得到乙個數,這個數只有第 i 位為1,其它位都為0

num 與這個數相與,得到的結果 要麼是0,要麼非0。結果為 非0 表示第 i 位為1,結果為0 表示第 i 位為0

三,將第 i 位設定為1

思路:第 i 位與0 或,值不變。第 i 位與1 或,變成1。因此,我們的目標是 num 與 乙個第 i 位值為1,其它位的值都為0的數相 或

//將 整數 num 的第 i 位的值 置為 1

private static int getbit(int num, int i)

四,將第 i 位設定為0(清0)

思路:第 i 位和0與,第 i 位就變成了0。其它位 都與 1 與,其它位保持不變。這樣,就只把第 i 位清0了

//將 整數 num 的第 i 位的值 置為 1

private static int getbit(int num, int i)

總之,獲取第 i 位的值,或者是將第 i 位置0或者置1  ,其總體思路就是:將 1 左移 i 位,然後再進行 與操作 或者  或操作。

golang二進位制位元組位的常用操作

golang作為一熱門的兼顧效能 效率的熱門語言,相信很多人都知道,在程式語言排行榜上一直都是很亮眼,作為一門強型別語言,二進位制位的操作肯定是避免不了的,資料的最小的單位也就是位,尤其是網路中封包 拆包,讀取二進位制檔案等用的特別廣泛,所以學好golang二進位制bit位的常用操作還是很必要的,而...

JAVA 學習 二進位制位操作符

按位與運算子 參加運算的兩個資料,按二進位制位進行 與 運算。運算規則 0 0 0 0 1 0 1 0 0 1 1 1 即 兩位同時為 1 結果才為 1 否則為0 例如 3 5 即 0000 0011 0000 0101 0000 0001 因此,3 5的值得1。另,負數按補碼形式參加按位與運算。i...

二進位制操作

關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...