1.java中无符号右移>>>,long型每64位一个循环,int型每
public static void main(String[] args) {
//long型无符号右移64位一个循环
long a = 33;
for (int i = 0; i < 65; i++) {
System.out.println(i + " " + (a >>> i));
}
//int型无符号右移32位一个循环
int b = 33;
for (int i = 0; i < 33; i++) {
System.out.println(i + " " + (b >>> i));
}
}
只有无符号右移这种运算操作,没有<<<这种操作。
2.正数与负数的移位运算
>>
有符号右移,移位后,正数左边补0,负数左边补1
<<
移位时,带着符号一起移动,右侧都补0
>>>
不管正负,左侧统一补0,所以负数无符号右移后,变为正数
示例代码如下:
/**
* 补码就是负数在计算机中的二进制表示方式
* 一个整数按照绝对值大小转换为二进制,是为原码,原码取反再加1是为补码
* -7
* 00000000 00000000 00000000 0111
* 取反
* 11111111 11111111 11111111 1000
* 加1
* 11111111 111