package com.example;
public class MyClass2 {
public static void main(String[] args) {
/**
* java位运算:
* << 左移位,在低位处补0
* >> 右移位,若为正数则高位补0,若为负数则高位补1
* >>> 无符号右移位,无论正负都在高位补0
* &与(AND),对两个整型操作数中对应位执行布尔代数,两个位都为1时输出1,否则0。
* |或(OR),对两个整型操作数中对应位执行布尔代数,两个位都为0时输出0,否则1。
* ~非(NOT),一元运算符。
* ^异或(XOR),对两个整型操作数中对应位执行布尔代数,两个位相等0,不等1。
*/
/**
以 int型变量 -5,为例,
[-5]原=1000 0000 0000 0000 0000 0000 0000 0101,
[-5]补=1111 1111 1111 1111 1111 1111 1111 1010,
[-5]补=1111 1111 1111 1111 1111 1111 1111 1011,
*/
// 1、左移( << )
// 1111 1111 1111 1111 1111 1111 1111 1011 然后左移2位后,低位补0://
// 1111 1111 1111 1111 1111 1111 1110 1100 运算结果
// 1000 0000 0000 0000 0000 0000 0001 0100 :运算结果的原码:十进制下为 - (4+16) = -20
System.out.println("-5 << 2= " + (-5 << 2));// 运行结果是-20
// 2、右移( >> ) 高位补符号位
// 1111 1111 1111 1111 1111 1111 1111 1011 然后右移2位,高位补1:
// 1111 1111 1111 1111 1111 1111 1111 1110 运算结果
// 1000 0000 0000 0000 0000 0000 0001 0010 :运算结果的原码:十进制下为 - (2) = -2
System.out.println("-5 >> 2= " + (-5 >> 2));// 运行结果是-2
// 3、无符号右移( >>> ) 高位补0
// 1111 1111 1111 1111 1111 1111 1111 1011 右移2位,高位补0
// 0011 1111 1111 1111 1111 1111 1111 1110 运算结果 (符号位是0,运算结果应该是一个很大的正数)
System.out.println("-5 >>> 2= " + (-5 >>> 2));// 结果是1073741822
}
}