1. 程式人生 > 實用技巧 >提取一個int型別數最右側的1

提取一個int型別數最右側的1

提取一個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);
}