提取一个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);
}
原文地址:https://www.cnblogs.com/Courage129/p/14145447.html