2012-04-09 235 views
0

我一直在网上搜索,似乎我永远也找不到这个问题的答案。如何更改二进制数中的位?Java:更改像1010这样的二进制数字并反转这些位。 1010 = 0101. 0到1和1到0的

例如:说我得到了1010,我想将数字0改为1,将1改为0。

现在,我有一个整数的二进制数。

我完全难住了,如果有人能帮助我,谢谢。

很抱歉,如果有人对我的问题感到困惑。我想要做的是将0的数字更改为1,将1的数字更改为0。

+6

'0b1010^0xFF'。 – khachik 2012-04-09 10:18:37

+2

你想扭转这些位或否定它们吗?你的例子并不清楚,你对01100有什么期望? 10011或00110 – 2012-04-09 10:19:33

+0

@ErkanHaspulat:极好的一点。目前还不清楚他是否想要异或/切换或反转订单。 – Thilo 2012-04-09 10:21:03

回答

1

如果你想翻转所有的位,你可以做

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; 
} 
+1

请注意,0b语法只适用于Java 7(对我来说不是问题,但可能是一些。) – berry120 2012-04-09 10:34:25

+0

嗯IM目前使用的是Eclipse,我将如何改变它所以它会为我工作? – TriggerLess 2012-04-09 10:36:41

+0

我不知道如何改变日食使用Java 7,但我敢打赌谷歌知道。 ;) – 2012-04-09 10:41:49

1

你不只是在Integer上寻找这个方法:http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#reverse(int)?

这应该可以做到。

+1

不是在他澄清了这个问题之后,尽管...... +1,因为我不知道这个方法。 – Thilo 2012-04-09 10:22:53

+0

尝试使用标准API(我自己发现一些新事物)),它似乎是BigInteger上的标准方法:http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html #xor(java.math.BigInteger中)。不知道这是否适合您的用例。 – 2012-04-09 10:28:18

+0

感谢您的帮助球员,生病尝试这个现在 – TriggerLess 2012-04-09 10:29:47

0

,如果你正在尝试做类似串位反向操作反向操作,那么我认为Java有一个名为方法“reverse()”(或类似),它会为你工作,我猜。你也可以试试@Dozz

0

一个快速演示用于讨论了什么问题,并在意见建议是:

int i = 42; 
    int j = i^0xFF; 
    System.out.println(Integer.toBinaryString(i)); 
    System.out.println(Integer.toBinaryString(j)); 

查看更多有关XOR here