java位移运算

public static void main(String[] args) {
//负数的补码是其正数原码 取反加1;
//-4(补码) --》 4(原码)00000000 00000000 00000000 00000100
// --》1111111 11111111 11111111 11111011
// --》 1111111 11111111 11111111 11111100(-4的补码)
int a = -4;

//带符号位的位移运算,高位是1补1,高位是0补0,往右移动一个 ,1111111 11111111 11111111 11111110 (补码)
// 最高位还是1是个负数,将其还原成 原码,减一,除符号位取反
// 1111111 11111111 11111111 11111110(补码)
// --》 1111111 11111111 11111111 11111101
// --》1000000 00000000 00000000 00000010(原码)
System.out.println(a >> 1);

//不带符号为的位移运算,高位只补0,往右移动一个 ,0111111 11111111 11111111 11111110 (补码)
// 最高位是0是个正数,将其还原成 原码,正数的原反补 都是自身
System.out.println(a >>> 1);
}

输出结果

-2
2147483646

原文地址:https://www.cnblogs.com/xlblog/p/13090091.html