Java中的位级操作

时间:2011-10-21 07:47:15

标签: java bit

我正在尝试在Java中进行一些操作来应用蒙版,表示集等。 原因:

int one=1;
int two=2;
int andop=1&2;
System.out.println(andop);

当应为“3”时打印“0”:

0...001
0...010
_______
0...011

我怎么能得到这种行为?

提前致谢

5 个答案:

答案 0 :(得分:11)

使用二进制'或'运算符:

int andop = 1 | 2;

二进制'和'运算符将保留两边的位集;在12的情况下,根本没有位。

答案 1 :(得分:10)

您按位OR和按位AND混合

答案 2 :(得分:5)

你正在寻找一个按位“OR”,而不是“AND”:

int both = one | two;

“或”说:“如果输入 x *中的1为1,则 n 应为1或*输入 y 中的1为1

“AND”说:“如果输入 x *中的1为1,则 n 应为1,输入 y 中为* 1

答案 3 :(得分:2)

&安培;必须是1

0...001
&...&&&
0...010
_______
0...000

回答= 0
|是或者,一个是好的

0...001
|...|||
0...010
_______
0...011

回答= 3

答案 4 :(得分:0)

更好的解决方案是使用枚举 int ONE(1),TWO(2)等,以及EnumSet

来自JavaDoc:

  

枚举集在内部表示为位向量。这个   表示非常紧凑和高效。空间和时间   这个类的性能应该足够好,以允许它作为一个   高质量,类型安全的替代传统的基于int的“bit”   标志“。