题目是这样的:取一个整数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 请高手们帮忙了..谢谢..
由于小弟没接触过位运算,,所以有些不懂,,但是有人给了代码给我.有些地方不太明白..请知道的高手们帮忙解释下我标记的地方是什么意思 谢谢了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 请高手们帮忙了..谢谢..
0按位非FFFF左移4--〉FFF0--〉按位非000F
这里的~是指取反的意思.
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的意思,自己可以去试验下.
int d=b&c; & 按位与运算符 两个相应位都为1 则结果为1,否则为0;这样:
00101010
00010110 这2个数用&算一下就是00000010这个数 java基础教材上都有讲的, 我不是高手 我照书上写的 哈哈
~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