/*
<<,>>,>>>
<<左移:左边最高位丢弃,右边补齐0
>>右移:最高位是0,左边补0,最高位是1,左边补1
>>>无符号右移:无论最高位是0还是1,左边都用0补齐
*/
public class WeiYunSuan {
public static void main(String[] args) {
//<<左移,左边的数据乘以2移动的次幂
System.out.println(3 << 2); // 3*2^2 = 3*4 = 12
//>>右移,左边的数据除以2移动的次幂
System.out.println(24 >> 2); // 24 / 2^2 = 24 / 4 = 6
System.out.println(24 >>> 2);
System.out.println(56 >> 4); //56 / 2^4 = 56/16 = 3
System.out.println(5 << 3); // 5 * 2^3 = 5 * 8 = 40
System.out.println(-24 >> 2);
System.out.println(-24 >>> 2);
}
}
/*
分析:
要想参与位运算,就必须先得知道二进制
1、计算出3的二进制:11
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
结果是:12
2、计算出24的二进制:11000
00000000 00000000 00000000 00011000
0000000000 00000000 00000000 000110(00)
结果是:6
3、计算出24的二进制:11000
00000000 00000000 00000000 00011000
0000000000 00000000 00000000 000110(00)
结果是:6
4、计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
1111111111 11111111 11111111 111010(00) 补码
补码:1111111111 11111111 11111111 111010
反码:1111111111 11111111 11111111 111001
原码:1000000000 00000000 00000000 000110
结果是:-6
//负数的补码到反码要 减1
5、计算出24的二进制:11000
原码:10000000 00000000 00000000 00011000
反码:11111111 11111111 11111111 11100111
补码:11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00) 补码
结果是:非常大
*/
感谢阅读,我是啊帅和和,一位大数据专业即将大四学生,祝你快乐。