将整数转换为位集并在java中对它们进行OR运算后将其转换回来

时间:2013-11-12 13:48:13

标签: java

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

A =(1 <&lt; 6)OR(1 <7)

有没有办法在执行OR运算后从A获得整数6和7?

如果答案已在其他地方得到解答,请告诉我。

4 个答案:

答案 0 :(得分:1)

除了你的表达式不是有效的Java并且不知道你想做什么这一事实,但假设你想确定哪些位是“设置”,你可以用Integer.numberOfTrailingZeros()执行此操作,例如:

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

这将分别获得第6和第7个。

干杯,

答案 1 :(得分:0)

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

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

如果bit6 == 1,则整数6位于bitset中。

答案 2 :(得分: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);

答案 3 :(得分: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