移位运算:>> << >>>

补充:int 为32位,为方便描述,以下以8位代替。计算机中以补码的形式来运算,故先转为补码来算。

  1. >>
    • 释义:带符号右移,即移位时空缺的位用符号位来补。(带符号为与后面的>>>对比)
    • 例:
      • 先看正数:
        int rightTwo=4;
        System.out.println(rightTwo>>2);//result:1
        过程:
        4的补码:其符号位为0——–0000 0100
        第:一步:向右移两位————–00 0001
        第二步:以符号位来补高位—0000 0001
        于是结果为1
      • 再看负数:
        int rightTwo=-4;
        System.out.println(rightTwo>>2);//result:-1
        过程:
        -4的补码:其符号位为1 ——1111 1100
        第一步:向右移两位—————11 1111
        第二步:以符号位来补高位—1111 1111
        于是结果为-1
    • 常见应用:求2的N次方?//2>>(n-1)
  2. <<
    • 释义:左移,由于是左移,低位直接补0,故不存在带不带符号的问题。
    • 例:
      • 先看正数:
        int leftTwo=7;
        System.out.println(leftTwo<<1);//result:14
        过程:
        7的补码:其符号位为0——0000 0111
        第一步:向坐移一位———0000 111
        第二步:以0来补低位——–0000 1110
        于是结果为14
      • 再看负数:
        int leftTwo=-7;
        System.out.println(leftTwo<<1);//result:-14
        过程:
        -7的补码:其符号位为0—–1111 1001
        第一步:向坐移一位———1111 001
        第二步:以0来补低位——–1111 0010
        于是结果为-14
  3. >>>
    • 释义:右移,即移位时空缺的位用0来补
    • 例:
      • 先看正数:
        int rightThree=4;
        System.out.println(rightThree>>>2);//result:1
        过程:
        4的补码:———————0000 0100
        第一步:向右移两位————00 0001
        第二步:以0来补高位——-0000 0001
        于是结果为1
      • 再看负数:
        int rightThree=-4;
        System.out.println(rightThree>>>2);//result:1073741823
        注意:1073741823此结果已超过8位,故以8位代替演示是不行的,此处转为32位。(以省略号代替)
        过程:
        -4的补码:——————–…1111 1100
        第一步:向右移两位————…11 1111
        第二步:以0来补高位——-00…11 1111
        于是结果为1073741823

提示:byte、short和char类型的表达式移位后的表达式类型为int 类型。
byte rightThree=-4;
System.out.println(rightThree>>>2);//result:1073741823

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值