Java中的>>,>>>

前言

我们都知道对于有符号数据类型,二进制最左端的数字为符号位,0代表正,1代表负,这里先介绍几个概念

逻辑左移=算术左移:高位溢出,低位补0
逻辑右移:低位溢出,高位补0
算术右移:低位溢出,高位用符号位的值补

比如一个有符号位的8位二进制数10101010,[]是添加的数字

逻辑左移一位:0101010[0]
逻辑左移两位:101010[00]

算术左移一位:0101010[0]
算术左移两位:101010[00]

逻辑右移一位:[0]1010101
逻辑右移两位:[00]101010

算术右移一位:[1]1010101
算术右移两位:[11]101010

算术左移和算术右移主要用来进行有符号数的倍增、减半
逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半
(Java中是没有无符号数据类型的,C和C++中有)

符号 例子 解释
<< num<< n 相当于 num×2n n u m × 2 n ,算数左移(逻辑左移)
>> num>>n 相当于 num2n n u m 2 n ,算数右移
>>> num>>>n 逻辑右移,当num为正数和算术右移一个效果
public static void main(String[] args) {
    // 20
    System.out.println(10 << 1);
    // -20
    System.out.println(-10 << 1);
    // 5
    System.out.println(10 >> 1);
    // -5
    System.out.println(-10 >> 1);
    // 5
    System.out.println(10 >>> 1);
    // 2147483643
    System.out.println(-10 >>> 1);
}

参考博客

[1]https://blog.csdn.net/coffeelifelau/article/details/52433653
[2]https://www.cnblogs.com/yongdaimi/p/5945114.html
[3]https://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html
[4]https://jingyan.baidu.com/article/5552ef47e5618d518ffbc9db.html
[5]https://wenku.baidu.com/view/35f45e711711cc7931b716ef.html
[6]https://zhidao.baidu.com/question/318471799.html
[7]https://www.cnblogs.com/ylz8401/p/6858020.html

你可能感兴趣的:(Java中的>>,>>>)