繁体   English   中英

反转最后一位

[英]Invert last bit

如何反转int的最后一位?

int a = 11;
System.out.print(a + " " + Integer.toBinaryString(a)) //11 1011

int b = invertLastBit(a);
System.out.print(b + " " + Integer.toBinaryString(b)); //10 1010

我写了这个:

static int invertLastBit(int i)
{
    String s = Integer.toBinaryString(i);
    if (s.charAt(s.length()-1) == '0'){
        s = s.substring(0,s.length() - 1);
        s = s+"1";
    }else if (s.charAt(s.length()-1) == '1') {
        s = s.substring(0, s.length() - 1);
        s = s + "0";
    }
    return Integer.parseInt(s, 2);
}

但是我应该如何重写invertLastBit()

您可以使用按位异或:

int x = 5; // 101
x = x ^ 1; // 100

使用您的原始示例:

int a = 11;
System.out.println (a + " " + Integer.toBinaryString(a)); //11 1011

int b = a^1;
System.out.println (b + " " + Integer.toBinaryString(b)); //10 1010

您甚至不必担心转换为二进制文件。

如果数字为奇数,则最后一位必须为1,因此,从数字中减去1。

否则,如果数字是偶数,则最后一位必须为0,将数字加1。

就这样。

static int invertLastBit(int i){
   if(i % 2 != 0) { //thanks harold
       return i - 1;
   } else {
       return i + 1;
   }
}

不难推断为什么会这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM