欢迎光临
我们一直在努力

Java中的左移、右移详细分析

1、<<(左移),>>(右移)皆属于位运算符.其运算比乘除快,所以我们可以用其优化代码。

2、<<表示左移,不分正负数,低位补0;

规则则是带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。

注:以下数据类型默认为byte-8位

左移时不管正负,低位补0

正数:**r = 20 << 2**

  20的二进制补码:0001 0100

  向左移动两位后:0101 0000

        结果:r = 80

负数:**r = -20 << 2**

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100

  左移两位后的补码:1011 0000

        反码:1010 1111

        原码:1101 0000

        结果:r = -80

3、>>表示右移,如果该数为正,则高位补0,若为负数,则高位补1;

注:以下数据类型默认为byte-8位

正数:r = 20 >> 2

  20的二进制补码:0001 0100

  向右移动两位后:0000 0101

       结果:r = 5

负数:r = -20 >> 2

  -20 的二进制原码 :1001 0100

  -20 的二进制反码 :1110 1011

  -20 的二进制补码 :1110 1100

  右移两位后的补码:1111 1011

        反码:1111 1010

        原码:1000 0101

        结果:r = -5

4、>>>表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0

正数: r = 20 >>> 2

    的结果与 r = 20 >> 2 相同;

负数: r = -20 >>> 2

注:以下数据类型默认为int 32位

  -20:源码:10000000 00000000 00000000 00010100

    反码:11111111  11111111  11111111  11101011

    补码:11111111  11111111  11111111  11101100

    右移:00111111  11111111  11111111  11111011

    结果:r = 1073741819

赞(0)
版权归原作者所有,如有侵权请告知。达维营-前端网 » Java中的左移、右移详细分析

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址