我一直在网上搜索,似乎永远找不到这个问题的答案。如何更改二进制数中的位?
示例:假设我得到 1010,我想将数字 0 更改为 1,将 1 更改为 0。
现在,我有一个整数中的二进制数。
我完全被难住了,如果有人可以帮助我,谢谢。
对不起,如果人们对我的问题感到困惑。我想要做的是将数字 0's 更改为 1's 和 1's 更改为 0's 。
您不只是在 Integer 上寻找这种方法:http ://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#reverse(int )?
这应该可以解决问题。
如果你想翻转你能做的所有位
int i = 0b1010;
或在 Java 6 中
int i = Integer.parseInt("1010", 2);
int i2 = ~i; // toggle 0 and 1's.
int i3 = i ^ 0xFF; // toggle the lower 8 bit only.
或者你可以试试
public static void main(String... args) {
System.out.println(toggleBits("1010"));
System.out.println(toggleBits("00001010"));
System.out.println(toggleBits("1100001010"));
}
private static String toggleBits(String s) {
long i = Long.parseLong(s, 2);
long i2 = i ^ ((1L << s.length()) - 1);
String s2 = Long.toBinaryString(i2);
while (s2.length() < s.length()) s2 = '0' + s2;
return s2;
}
如果您尝试进行类似于字符串反转操作的位反转操作,那么我认为 Java 有一个名为“ reverse()
”(或类似)的方法,我猜它会为您工作。您也可以尝试@Dozz的答案。
评论中讨论和建议的内容的快速演示将是:
int i = 42;
int j = i ^ 0xFF;
System.out.println(Integer.toBinaryString(i));
System.out.println(Integer.toBinaryString(j));
在此处查看有关 XOR的更多信息。