Java中的位级操作
我正在尝试在 Java 中进行一些位操作来应用掩码、表示集合等。 为什么:
int one=1;
int two=2;
int andop=1&2;
System.out.println(andop);
在应该是“3”时打印“0”:
0...001
0...010
_______
0...011
我怎样才能得到这种行为?
提前致谢
I'm trying to make some bit operations in Java for applying masks, represent sets etc.
Why:
int one=1;
int two=2;
int andop=1&2;
System.out.println(andop);
Prints a "0" when is supposed to be "3":
0...001
0...010
_______
0...011
And how can I get that behavior?
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
使用二元“或”运算符:
二元“与”运算符将保留两侧的位集;在
1
和2
的情况下,根本没有位。Use the binary 'or' operator:
The binary 'and' operator will leave bits sets that are in both sides; in the case of
1
and2
that is no bits at all.您混淆了按位或和按位与
You mixed up bitwise OR and bitwise AND
您正在寻找按位“OR”,而不是“AND”:
“OR”表示:“如果输入x中的位n应该为1*或*输入 y 中为 1"
"AND" 表示:“如果输入 x 中为 1,则位 n 应该为 1 *并且* 在输入中为 1输入y”
You're looking for a bitwise "OR", not "AND":
"OR" says: "bit n should be 1 if it's 1 in input x *or* it's 1 in input y"
"AND" says: "bit n should be 1 if it's 1 in input x *and* it's 1 in input y"
&必须都是 1 个
答案 = 0
|是或,一个 1 就可以
答案 = 3
& must be both 1
answer = 0
| is or ,one 1 is OK
answer = 3
更好的解决方案是使用带有 int 值 ONE(1)、TWO(2) 等的 enum 以及 EnumSet。
来自 JavaDoc:
Better solution is to use enums with int values ONE(1), TWO(2) etc, and EnumSet.
From JavaDoc: