程序目标:将一个整数110从右端开始的4~7位变为0;
 
    程序
class Test
{
public static void main(String args[])
{
  int m=110;
  int b=15;                           //构建一个1~4位为1111的整数;
  int u=b<<3;                         //让该整数有符号位移3位为4~7位为1111的整数
  int q=~u;                           //对4~7位为1111的整数到反得到4~7位为0000其余位为1的整数
  int w=q|m;                          //或运算进行比较                   
  int h=q&m;                         // 进行与运算得到4~7位为0;   
  
 
   System.out.println(Integer.toBinaryString(m));   System.out.println(Integer.toBinaryString(q));
System.out.println(Integer.toBinaryString(w));
System.out.println(Integer.toBinaryString(h));      }
}
    结果:   1101110
           11111111111111111111111110000111
           11111111111111111111111111101111
           110
问题:为什么可以进行与运算进好像是110与 11111111111111111111111110000111进行了与运算而不是我想要的1101110与11111111111111111111111110000111进行的运算?而或运算却是1101110与11111111111111111111111110000111进行的却不是110与其比较.看起来矛盾的啊.
  请教下高手们,怎样让1101110(即二进制)与其进行与运算?

解决方案 »

  1.   

    have a tryint a = 110;
    int b = a % 8; //保留右3位
    a >>= 7; //右移7位
    a <<= 7; //左移7位(这时右边7位都是0)
    a |= b; //把开始的右端3位补回来
      

  2.   

    一个int是32位的
    class Test {
    public static void main(String args[]) {
    int numb = 110; // 01101110b
                    int mask = 135; // 10000111b
    int resu = numb & mask;
    System.out.println(Integer.toBinaryString(resu));
    }
    }/*
    110
    */