关于java位移的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 15:53:10
Int类型整数8,右移32位。
原值:8 0000 0000 0000 0000 0000 0000 0000 1000
第一次右移: 0000 0000 0000 0000 0000 0000 0000 0100
第二次右移: 0000 0000 0000 0000 0000 0000 0000 0010
第三次右移: 0000 0000 0000 0000 0000 0000 0000 0001
第四次右移: 0000 0000 0000 0000 0000 0000 0000 0000 1

说明:经过四次右移,二进制数1已经被移除32位以外了,而且java的右移并不是循环右移,为什么int类型整数8经过右移32位后,结果还是8 ?我比较笨,希望回答者能像我这样用例子说话,这样我也能看明白,谢谢!
D:\java>javac TestBina.java

D:\java>java TestBina
int:8,binary:
00000000000000000000000000001000
int:4,binary:
00000000000000000000000000000100
int:2,binary:
00000000000000000000000000000010
int:1,binary:
00000000000000000000000000000001
int:0,binary:
00000000000000000000000000000000
int:0,binary:
00000000000000000000000000000000
int:0,binary:
00000000000000000000000000000000
int:0,binary:
00000000000000000000000000000000
int:0,binary:
0000000000

java中的移位是这么做的
如:
int a = 8;
int b = 32;
a>>>b 等价于 a>>>(b%32)
也就是说
a>>>32 等价于 a>>>0,移32位等于没移
a>>>33 等价于 a>>>1
a>>>34 等价于 a>>>2

不信你可以试试下面的代码

int a = 8;
System.out.println(a>>>33 == a>>>1);//看看这个结果是不是true

以上的答案相当好。