对于java简单位运算题目的问题,高手给看看

来源:百度知道 编辑:UC知道 时间:2024/05/21 16:55:40
下面是题目。我简写了。
byte a=-128;
byte b=(byte)(a>>128);
为什么b的值是-128???
百思不得其解,求教高手。
。。。汗,那时候真是年少轻狂,什么话都敢乱讲,真丢人。

>>右移 位运算符,
byte是8位
右移128位你说是什么?不还是等于没移动嘛!
128是8的倍数吧,你算算

这是个循环移位。-128的补码(计算机中的数都是以补码表示的)是
10000000,a>>1结果是01000000,a>>2结果是00100000,…………
a>>7为00000001,a>>8为10000000,又回来了,而128除以8等于16,所以a>>128只是将上述过程重复多次而已。结果当然还是-128。

其实你补充的很对了,负数右移的时候最高位补1,本来字节只有8位,你右移了128位远远超过范围了,所以现在的8位其实都是补位既11111111这就是-128,而10000001这才是-1.
郁闷了,是我想的简单了?byte本来就8位,移那么多位不是在做无用功吗?反正超出范围的都是斩掉的啊?不是吗?好象没有想的那么复杂吧?
我也蒙了,惭愧死列