一,計算某個正數的二進位制表示法中 1 的個數
1 //求解正數的二進位制表示法中的 1 的位數演算法思路:每次for迴圈,都將num的二進位制中最右邊的 1 清除。2 private static int countbit(int num)
8 return count;
9 }
為什麼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 位的值1 左移 i 位後,得到乙個數,這個數只有第 i 位為1,其它位都為0private static boolean getbit(int num, int i)
num 與這個數相與,得到的結果 要麼是0,要麼非0。結果為 非0 表示第 i 位為1,結果為0 表示第 i 位為0
三,將第 i 位設定為1
思路:第 i 位與0 或,值不變。第 i 位與1 或,變成1。因此,我們的目標是 num 與 乙個第 i 位值為1,其它位的值都為0的數相 或
//將 整數 num 的第 i 位的值 置為 1四,將第 i 位設定為0(清0)private static int getbit(int num, int i)
思路:第 i 位和0與,第 i 位就變成了0。其它位 都與 1 與,其它位保持不變。這樣,就只把第 i 位清0了
//將 整數 num 的第 i 位的值 置為 1總之,獲取第 i 位的值,或者是將第 i 位置0或者置1 ,其總體思路就是:將 1 左移 i 位,然後再進行 與操作 或者 或操作。private static int getbit(int num, int 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...
二進位制操作
關於二進位制操作很常見,很多筆試面試題中也有涉及,本篇主要圍繞二進位制翻轉,二進位制最高位判定和給定整數的二進位制輸出來 靈活使用二進位制的 操作。一 給定整數的二進位制翻轉 思路 可以考慮逐次翻轉得到最終的翻轉結果,具體做法,首先將所有二進位制位奇偶位逐個翻轉,然後以兩位為一對 作為整體 奇偶對逐...