如何反转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()
?
答案 0 :(得分:13)
您可以使用按位异或:
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 :(得分:4)
您甚至不必担心转换为二进制文件。
如果数字为奇数,则最后一位必须为1,因此,从数字中减1。
否则,如果数字是偶数,则最后一位必须为0,将数字加1。
这就是全部。
static int invertLastBit(int i){
if(i % 2 != 0) { //thanks harold
return i - 1;
} else {
return i + 1;
}
}
不难解释为什么这样做。