java移位运算int型数据移动32位结果为什么不变

来源:百度知道 编辑:UC知道 时间:2024/06/25 22:55:12
比如这么一段代码:
int i = 127;
i>>>=32;
System.out.println(i);
i>>>=128;
System.out.println(i);
输出结果都是127.

我知道若i是int的
i<<n 等价于 b<<(n%32)
但是为什么是这样子的呢?

在Think in java中有这么一句话:若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。
我知道是对这个问题的解释 但是具体看不懂 有没高手能用具体代码教教我这么回事啊?
。。你真逗。。很显然不是。。
我也想不明白啊 但是人家题目是这么出的 你去训训出题的?

低五位就是0-31之间,long型是低六位0-63之间。就是这么定义的,估计是因为int的存储空间是32位、long型是64位。超出其存储范围的位移是没有意义的。

java就是这么定义的,你去问问sun问什么这样设计
其它的设计语言不一定就是这么定义的

“我知道若i是int的
i<<n 等价于 b<<(n%32)
但是为什么是这样子的呢?”

是不是因为整形是32位的,所以左移一位右边所补的是左边截掉的数啊
同理其他的

“不切实际”。int一共32位,你移32位干嘛?5位正好0~31,够你用了。想不明白