Java基础之移位运算

view

不轻言放弃,年轻就是要拼搏 ~ ~ 本就是一无所有,又害怕失去什么?

移位运算

总所皆知,计算机存储数据是通过0 1 存储的,因此移位运算对于计算机来说,就是非常快的一种运算了。

移位运算分为两种类型

  • 带符号数移位
  • 不带符号数移位

    带符号数移位运算

    >>规则

    (带符号右移)将参与运算的二进制数右移,如果高位是0,用0补齐。高位是1,用1补齐
    比如
    1
    2
    3
    4
    5
    6
    public static void main(String[] args) {
    System.out.println(7 >> 2);
    System.out.println(-7 >> 2);
    }
    1
    -2
7的二进制 0000 0111
7的移位二进制 0000 0001

所以结果为是1

-7的二进制 1000 0111
-7的反码 1111 1000
-7的补码 1111 1001
移位 1111 1110
反码 1111 1101
-7移位二进制 1000 0010

所以结果是-2

<<规则

(带符号左移运算)参与运算的二进制数左移,在低位产生的空位用 0 来补齐。

无符号数移位运算

>>>规则

(无符号数右移动)参与运算的二进制数右移,在高位产生空位用0 来补齐

1
2
3
4
5
6
7
public static void main(String[] args){

int a = -7;
System.out.println(a >>> 2); // 输出结果:1073741822

}
1073741822

因为高位变成0了,变成了正数,不需要取反,所有的1都要参加运算了。所以不能简单变成8位表示了

7原码: 1000 0000 0000 0000 0000 0000 0000 0111
反码: 1111 1111 1111 1111 1111 1111 1111 1000
补码: 1111 1111 1111 1111 1111 1111 1111 1001
补码:(右移之后) 0011 1111 1111 1111 1111 1111 1111 1110
坚持原创技术分享,您的支持将鼓励我继续创作!