提取一個int型別數最右側的1
阿新 • • 發佈:2020-12-16
提取一個int型別數最右側的1
演算法描述
把一個int型別的數,提取出最右側的1來,例如:
6 對應的二進位制位 0000 0110,那麼取出來的應該是0000 0010
演算法思路
對原數0000 0110取反,將原數右側1右邊的0位全變成了1(1111 1001),
這時候如果加1,會產生進位到原數右側非零位,資訊得以記錄,再與原數與操作,即可將1提取.
圖示:
程式碼:
public static void findBit1RightNumber(int number){ int temp = ~number; temp += 1; temp = number & temp; System.out.println("取出右邊的1為:"+intToBinary(temp)); } /** * 這一段是工具,將整數轉二進位制,前面補零 * */ public static String intToBinary(int num){ //1.補零 String binaryStr = Integer.toBinaryString(num); int bitNum = 8; if(bitNum<binaryStr.length()) { bitNum += bitNum;//不斷翻倍8 16 32 64... } while(binaryStr.length() < bitNum){ binaryStr = "0"+binaryStr; } //2.格式化 String str = ""; for (int i = 0; i < binaryStr.length();) { str += binaryStr.substring(i, i=i+4)+","; } return str.substring(0, str.length()-1); }