我的代码是
final int CONST_1 = 1010;
final int CONST_2 = 1011;
System.out.println("CONST_1 & CONST_2: " + Integer.toBinaryString(CONST_1 & CONST_2));
System.out.println("CONST_1 ^ CONST_2: " + Integer.toBinaryString(CONST_1 ^ CONST_2));
System.out.println("CONST_1 | CONST_2: " + Integer.toBinaryString(CONST_1 | CONST_2));
System.out.println("~CONST_1 : " + Integer.toBinaryString(~CONST_1));输出为
CONST_1 & CONST_2: 1111110010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1111110011
~CONST_1 : 11111111111111111111110000001101在我看来,这是错误的,也应该是:
CONST_1 & CONST_2: 1010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1011
~CONST_1 : 101请解释一下我为什么会有这样的结果。谢谢!
发布于 2011-12-11 22:47:00
更改此设置:
final int CONST_1 = 1010;
final int CONST_2 = 1011;要这样做:
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;不要忘记,默认情况下,字面值是十进制的。很明显,您希望它们是二进制的。
二进制文字需要Java 1.7。因此,如果没有这个功能,你可以这样做:
final int CONST_1 = Integer.parseInt("1010",2);
final int CONST_2 = Integer.parseInt("1011",2);发布于 2011-12-11 22:49:05
CONST_1是以十进制表示的1010。CONST_1的二进制值为1111110010。类似地,CONST_2也是1111110011。
现在这个结果更有意义了吗?
发布于 2011-12-11 23:14:40
我想你知道文字是什么意思。如果没有,请参考:Java Literals和Literal。
现在,在Java中,Integer和Floating-Point文本默认是十进制的。因此,您在上面输入的值将是十进制的1010。例如,1,010。如果您希望它们是二进制的(从问题中可以清楚地看出),那么有很多种可能。
您可以使用与要表示的二进制值等效的十进制值。这里,例如,二进制1010的十进制等价物是10,而二进制1011的十进制等价物是11。
final int CONST_1 = 10;
final int CONST_2 = 11;每个wrapper类都有一个解析方法,该方法也将number系统的基数作为参数。所以
final int CONST_1 = Integer.parseInt("1010", 2);
final int CONST_2 = Integer.parseInt("1011", 2);旧版本的Java不支持二进制文字。Java7引入了二进制文字。参见features。
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;https://stackoverflow.com/questions/8464808
复制相似问题