首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按位运算符

按位运算符
EN

Stack Overflow用户
提问于 2011-12-11 22:45:07
回答 5查看 1.3K关注 0票数 2

我的代码是

代码语言:javascript
运行
复制
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));

输出为

代码语言:javascript
运行
复制
CONST_1 & CONST_2: 1111110010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1111110011
~CONST_1 : 11111111111111111111110000001101

在我看来,这是错误的,也应该是:

代码语言:javascript
运行
复制
CONST_1 & CONST_2: 1010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1011
~CONST_1 : 101

请解释一下我为什么会有这样的结果。谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-11 22:47:00

更改此设置:

代码语言:javascript
运行
复制
final int CONST_1 = 1010;
final int CONST_2 = 1011;

要这样做:

代码语言:javascript
运行
复制
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;

不要忘记,默认情况下,字面值是十进制的。很明显,您希望它们是二进制的。

二进制文字需要Java 1.7。因此,如果没有这个功能,你可以这样做:

代码语言:javascript
运行
复制
final int CONST_1 = Integer.parseInt("1010",2);
final int CONST_2 = Integer.parseInt("1011",2);
票数 8
EN

Stack Overflow用户

发布于 2011-12-11 22:49:05

CONST_1是以十进制表示的1010CONST_1的二进制值为1111110010。类似地,CONST_2也是1111110011

现在这个结果更有意义了吗?

票数 1
EN

Stack Overflow用户

发布于 2011-12-11 23:14:40

我想你知道文字是什么意思。如果没有,请参考:Java LiteralsLiteral

现在,在Java中,Integer和Floating-Point文本默认是十进制的。因此,您在上面输入的值将是十进制的1010。例如,1,010。如果您希望它们是二进制的(从问题中可以清楚地看出),那么有很多种可能。

  • 使用等效的十进制值。

您可以使用与要表示的二进制值等效的十进制值。这里,例如,二进制1010的十进制等价物是10,而二进制1011的十进制等价物是11

代码语言:javascript
运行
复制
final int CONST_1 = 10;
final int CONST_2 = 11;

  • 使用包装类解析方法

每个wrapper类都有一个解析方法,该方法也将number系统的基数作为参数。所以

代码语言:javascript
运行
复制
final int CONST_1 = Integer.parseInt("1010", 2);
final int CONST_2 = Integer.parseInt("1011", 2);

  • 如果您使用的是Java7,请使用二进制文字

旧版本的Java不支持二进制文字。Java7引入了二进制文字。参见features

代码语言:javascript
运行
复制
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8464808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档