题目是这样的:取一个整数a从右端开始的4~7位。 
由于小弟没接触过位运算,,所以有些不懂,,但是有人给了代码给我.有些地方不太明白..请知道的高手们帮忙解释下我标记的地方是什么意思  谢谢了public static void move(int a)
{
System.out.println(a);
int b=a>>4;//这里我知道是把a往右移4位
System.out.println(b);
int c=~(~0<<4);//这里就不明白了
System.out.println(c);
int d=b&c;//这里是做与运算,也不太明白..
System.out.println(d);
}我试了下程序,我给a为123 运行结果是123,7 15 7 请高手们帮忙了..谢谢..

解决方案 »

  1.   

    ~是按位非的意思吧
    0按位非FFFF左移4--〉FFF0--〉按位非000F
      

  2.   

     int c=~(~0<<4)
    这里的~是指取反的意思.
    eg:
     0 <==> 00000000 00000000 00000000 00000000
    ~0 <==> 11111111 11111111 11111111 11111111~0代表一个负数,计算它的值是 -1
    也就是-(~ 11111111 11111111 11111111 11111110)-1而对于&的话,其实就是 1&0 = 0 ; 1&1 = 1 ; 0&0 = 0的意思,自己可以去试验下.
      

  3.   

    int b=a>>4 右移运算符  右移一位相当于除2  这个右移了4位int c=~(~0<<4);  ~ 是按位取反运算符   00000000变成 11111111  再左移4位  左移一位相当于乘2 
    int d=b&c;  & 按位与运算符  两个相应位都为1 则结果为1,否则为0;这样:
    00101010
    00010110 这2个数用&算一下就是00000010这个数 java基础教材上都有讲的, 我不是高手  我照书上写的  哈哈
      

  4.   

    int c=~(~0 < <4);  0 =  00000000 00000000 00000000 00000000 
    ~0 = 11111111 11111111 11111111 11111111  
    ~0 << 4 = 11111111 11111111 11111111 11110000 
    ~(~0 << 4) = 00000000 00000000 00000000 00001111 =15int d=b&c;  b= 00000000 00000000 00000000 00000111
     c= 00000000 00000000 00000000 00001111  按位与 & 得
        00000000 00000000 00000000 00000111 =7