java >> >>> 位运算总结
int a = 5;
int b = -5;
a>>1:
1.求a的原码: 00000000 00000000 00000000 00000101
2.求a的反码:00000000 00000000 00000000 00000101
3.求a的补码:00000000 00000000 00000000 00000101
4.位运算:向右移动1位,>>补的是符号位
00000000 00000000 00000000 00000010
5.对结果求补码
00000000 00000000 00000000 00000010
6.输出:2
a>>>1:
1.求a的原码: 00000000 00000000 00000000 00000101
2.求a的反码:00000000 00000000 00000000 00000101
3.求a的补码:00000000 00000000 00000000 00000101
4.位运算:向右移动1位,>>>补的是0
00000000 00000000 00000000 00000010
5.对结果求补码
00000000 00000000 00000000 00000010
6.输出:2
b==-5:
b>>1
1.求b的原码: 10000000 00000000 00000000 00000101
2.求a的反码:11111111 11111111 11111111 11111010
3.求a的补码:11111111 11111111 11111111 11111011
4.位运算:向右移动1位,负数补的是1
11111111 11111111 11111111 11111101
5.对结果求补码
10000000 00000000 00000000 00000011
6.输出:-3
b>>>1
1.求b的原码: 10000000 00000000 00000000 00000101
2.求a的反码:11111111 11111111 11111111 11111010
3.求a的补码:11111111 11111111 11111111 11111011
4.位运算:向右移动1位,>>>补的是0(无符号位运算)
01111111 11111111 11111111 11111101(因为是无符号位,所以是正数)
5.对结果求补码(正数的补码是其本身)
01111111 11111111 11111111 11111101
6.输出:2147483645
测试代码:
int i = 5;
int b = -5;
System.out.println(i>>1);
System.out.println(i>>>1);
System.out.println(b>>1);
System.out.println(b>>>1);