搜索
您的当前位置:首页正文

java 位移

来源:知库网

一、左移

<< 逻辑左移,右边补0,符号位和其他位一样移动。

在没有数字溢出的情况下,左移一位相当于✖️2的1次方,左移N位就相当于✖️2的n次方

例如:

1 << 4 
结果为:16

1 << 10
结果为:1024

3 << 10
结果为:3072,即为:3 x (1 << 10)

计算过程:

例如 1 二进制形式:

0000 0000 0000 0000 0000 0000 0000 0001

左移1位(1 << 1):

// 所有数字向左移动一位
// 最高位就相当于移除了,最后一位补0
0000 0000 0000 0000 0000 0000 0000 0010

结果为2(左移1位是2的1次方)。

左移2位(1 << 2):

0000 0000 0000 0000 0000 0000 0000 0100

结果为4(左移2位是2的2次方)。

二、右移

>> 右移,情况:

  1. 正数,高位补0
  2. 负数,高位补1

例如:

4 >> 1

4 的二进制为:
0000 0000 0000 0000 0000 0000 0000 0100
右移1位(正数,高位补0):
0000 0000 0000 0000 0000 0000 0000 0010
结果为:2

-4 >> 1

-4 的二进制为:
1111 1111 1111 1111 1111 1111 1111 1100
右移1位(负数,高位补1):
1111 1111 1111 1111 1111 1111 1111 1110
结果为:-2

右移1位就相当于一次➗2

>>> 无符号右移,因为是无符号的,所以不管正数还是负数,高位都补0。

例如:

-4 >>> 1

-4 的二进制为:
1111 1111 1111 1111 1111 1111 1111 1100
无符号右移1位(高位补0):
01111 1111 1111 1111 1111 1111 1111 110
结果为:2147483646

查看数字的二进制形式:

System.out.println(Integer.toBinaryString(-4));
// 如果是正数,前面的0都会省略,例如 '4',输出结果就为 ‘100’
Top