黑马程序员技术交流社区
标题:
java 中的带符号>>右移操作疑问
[打印本页]
作者:
andylau
时间:
2013-11-3 09:23
标题:
java 中的带符号>>右移操作疑问
System.out.println(-6>>2);//-2;//这是为何?(我的理解应该是-1)
System.out.println(-6>>1);//-3;//这个还能理解
System.out.println(-6>>3);//-1;这是为何?(我的理解应该是0)
System.out.println(-6>>4);//-1;这是为何?(我的理解应该是0)
作者:
回天之力
时间:
2013-11-3 09:52
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。
所以你要看清楚上面的,在重新右移一下。
作者:
ixiangfeng
时间:
2013-11-3 09:57
带符号右移 最高位是多少则补多少
-6的二进制是1111 1111 1111 1111 1111 1111 1111 1010
带符号右移1位则为 1(补) 1111 1111 1111 1111 1111 1111 1111 101(0去除) 转为十进制为-3
带符号右移2位则为 11(补) 1111 1111 1111 1111 1111 1111 1111 10(10去除) 转为十进制为-2
带符号右移3位则为 111(补) 1111 1111 1111 1111 1111 1111 1111 1(010去除) 转为十进制为-1
带符号右移4位则为 1111(补) 1111 1111 1111 1111 1111 1111 1111 (1010去除) 转为十进制为-1
作者:
麦者
时间:
2013-11-3 10:02
过程如下
-6>>2 100000000000000000000110
111111111111111111111001
111111111111111111111010
111111111111111111111110
111111111111111111111101
100000000000000000000010
>>3 100000000000000000000110
111111111111111111111001
111111111111111111111010
111111111111111111111111
111111111111111111111110
100000000000000000000001
>>4 100000000000000000000110
111111111111111111111001
111111111111111111111010
111111111111111111111111
111111111111111111111110
100000000000000000000001
作者:
黄炳期
时间:
2013-11-3 10:50
帖子已重新分类,若还有疑惑,可继续提问。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2