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

来源:互联网 发布:mac 系统首选项在哪里 编辑:程序博客网 时间:2024/06/05 21:02

补充: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

0 0
原创粉丝点击