0

我对两个整数执行操作......考虑我做

A = (1 << 6) 或 (1 << 7)

有没有一种方法可以在执行 OR 操作后从 A 中获取整数 6 和 7?

请让我知道答案是否已在其他任何地方得到回答。

4

4 回答 4

1

除了您的表达式不是有效的 Java 并且不知道您想做什么之外,假设您希望确定哪些位是“设置”的,您可以使用 来执行此操作Integer.numberOfTrailingZeros(),例如:

Integer.numberOfTrailingZeros( A & 64 );   // 1<<6 == 64
Integer.numberOfTrailingZeros( A & 128 );  // 1<<7 == 128

这将分别为您提供整数 6 和 7。

干杯,

于 2013-11-12T14:01:22.473 回答
0

您可以通过测试来获取各个位:

bit6 = (A >> 6) & 1;
bit7 = (A >> 7) & 1;

如果 bit6 == 1,则整数 6 在位集中。

于 2013-11-12T14:01:11.613 回答
0
int value=(1<<7) | (1<<6);

StringBuilder sb=new StringBuilder();
if(value==0) sb.append("0");
else while(value!=0) {
  int b=Integer.highestOneBit(value);
  if(b==1) sb.append("1");
  else
    sb.append("(1<<").append(Integer.numberOfTrailingZeros(b)).append(')');
  value-=b;
  if(value>0) sb.append(" | ");
}
System.out.println(sb);
于 2013-11-12T14:08:43.260 回答
0

如果您总是位移 1,那么您可以执行以下操作。

int a = (1 << 6) ^ (1 << 7);
int temp = a;
for(int i=0;i<32;i++) {
    if((temp&1)==1) 
        System.out.println("number: " + i);
    temp = temp >> 1;
}

输出:

 number: 6
 number: 7
于 2013-11-12T14:10:05.650 回答