文章目录
- 1. 算术左移和逻辑左移
- 2. 算术右移和逻辑右移
- 3. Java中<<、>>和>>>的含义
1. 算术左移和逻辑左移
对于有符号数或无符号数:算术左移 == 逻辑左移。
操作逻辑:丢弃高位,低位补0。
数值变化:左移n位,相当于乘以2的n次方。(对于无符号数、有符号数的正数或负数,均成立)。
2. 算术右移和逻辑右移
分类 | 算术右移 | 逻辑右移 | 注 |
---|---|---|---|
无符号数 | 丢弃低位,高位补0 | 丢弃低位,高位补0 | 对于无符号数,算术右移 == 逻辑右移 |
有符号数 | 丢弃低位,高位补符号位 (正数为0,负数为1) | 丢弃低位,高位补0 | 对于有符号数,算术右移 != 逻辑右移 |
【注】对于无符号数、有符号数的正数:算术右移 == 逻辑右移。
数值变化:右移n位,相当于除以2的n次方。适用于:
- 无符号数的右移。
- 有符号数的算术右移、正数的逻辑右移。
【注】只有一种情况不适用,就是负数的逻辑右移。
3. Java中<<、>>和>>>的含义
<<
:算术左移。>>
:算术右移。>>>
:逻辑右移。
【注】没有<<<
符号。
程序示例:
public class BitOperator{public static void main(String[] args){System.out.println(2<<1);//算术左移,输出4System.out.println(-2<<1);//算术左移,输出-4System.out.println(2>>1);//算术右移,输出1System.out.println(-2>>1);//算术右移,输出-1System.out.println(2>>>1);//逻辑右移,输出1System.out.println(-2>>>1);//逻辑右移,输出2147483647}
}
运行结果: