Java中位运算符>>和>>>的区别

简介: Java中位运算符>>和>>>的区别
r = 20 << 2   = 80
r = -20 << 2  = -80
r = 20 >> 2   = 5
r = -20 >> 2  = -5
r = -20 >>> 2 = 5
r = -20 >>> 2 = 1073741819

一、<< 表示左移两位

<<表示左移移,不分正负数,低位补0;
注:以下数据类型默认为byte-8位
左移时不管正负,低位补0
正数:r = 20 << 2

    正数:r = 20 << 2
        20的二进制补码:0001 0100
        向左移动两位后:0101 0000
       结果:r = 80

负数:r = -20 << 2

    负数:r = -20 << 2
        -20 的二进制原码 :1001 0100
        -20 的二进制反码 :1110 1011
        -20 的二进制补码 :1110 1100
        左移两位后的补码:1011 0000
            反码:1010 1111
            原码:1101 0000 
            结果:r = -80

二、>> 表示右移两位

其中>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;
注:以下数据类型默认为byte-8位

正数:r = 20 >> 2

    正数:r = 20 >> 2
        20的二进制补码:0001 0100
        向右移动两位后:0000 0101
           结果:r = 5

负数:r = -20 >> 2

    负数:r = -20 >> 2
        -20 的二进制原码 :1001 0100
        -20 的二进制反码 :1110 1011
        -20 的二进制补码 :1110 1100 
        右移两位后的补码:1111 1011 
           反码:1111 1010
           原码:1000 0101
           结果:r = -5

三、>>>表示无符号右移

1、>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0
正数: r = 20 >>> 2
    的结果与 r = 20 >> 2 相同;
负数: r = -20 >>> 2
注:以下数据类型默认为int 32位

    r = -20 >>> 2
        源码:10000000  00000000   00000000   00010100
        反码:11111111  11111111   11111111   11101011
        补码:11111111  11111111   11111111   11101100
        右移:00111111  11111111   11111111   11111011
        结果:r = 1073741819
目录
相关文章
|
20天前
|
Java UED
Java Web 中forward 和 redirect 的区别
在Java Web开发中,页面跳转是构建用户界面和实现业务逻辑的重要组成部分。Forward(转发)和Redirect(重定向)是两种常见的跳转方式,它们分别具有不同的特点和适用场景。正确地选择和使用这两种跳转方式,有助于提高Web应用的性能、用户体验和代码可维护性。
20 4
|
14天前
|
安全 Java
【JAVA】在 Queue 中 poll()和 remove()有什么区别
【JAVA】在 Queue 中 poll()和 remove()有什么区别
|
14天前
|
Java API
【JAVA】final、finally、finalize 有什么区别?
【JAVA】final、finally、finalize 有什么区别?
|
14天前
|
Java
【JAVA】throw 和 throws 的区别?
【JAVA】throw 和 throws 的区别?
|
14天前
|
Java
【JAVA】Iterator 和 ListIterator 有什么区别?
【JAVA】Iterator 和 ListIterator 有什么区别?
|
2天前
|
安全 Java 编译器
Java中String、StringBuilder和StringBuffer的区别
Java中String、StringBuilder和StringBuffer的区别
|
11天前
|
Java
Java中 a+=b和a=a+b有什么区别?
Java中 a+=b和a=a+b有什么区别?
|
11天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
14天前
|
存储 安全 Java
【JAVA】concurrentHashMap和HashTable有什么区别
【JAVA】concurrentHashMap和HashTable有什么区别
|
14天前
|
安全 Java
【JAVA】线程的run()和start()有什么区别?
【JAVA】线程的run()和start()有什么区别?