字长n=8
x=-15;
y=x>>2; //y=?
z=x>>>2; //z=?
老师给的答案是:
x=1111 0001
y=1111 1100 y=-4
z=0011 1100 z=60
跪求解释~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
x=-15;
y=x>>2; //y=?
z=x>>>2; //z=?
老师给的答案是:
x=1111 0001
y=1111 1100 y=-4
z=0011 1100 z=60
跪求解释~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2:>>> 右移时不会在最左边补充符号位,左边就填充 0 了,因此 >>> 表示无符号右移
x=-15的补码 11110001
y=x>>2 有符号右移两位 11111100 -4
z=x>>>2 无符号右移两位00111100 60
z=x>>>2; 这个是逻辑右移,不带符号
正解.
注意:如果x不是int型而是byte或short之类的,那么是先转化成int,再移位,再truncate.
或许这和虚拟机实现有关,请哪位高手解释一下
1)、15的补码: 0000 1111
2)、-15的补码:1111 0000 + 1=1111 0001
-----------------------------------------------------
y=x>>2;//y=-4
1)1111 0001>>2=1111 1100(最高位符号位)
2)1111 1100这是y的补码
3)原码:1000 0011+1=1000 0100=-4
-----------------------------------------------------
z=x>>>2//无符号右移,z=60
1)1111 0001>>2=0011 1100(最高位符号位)
2)0011 1100这是z的补码
3)原码同补码:0011 1100 = 0x3C=60
其实这是java基础问题
楼主要好好看看java的基础哦
记住的话就别再忘了