当前位置 : 主页 > 编程语言 > java >

Java:移位运算符左移运算符<<、右移运算符>>、无符号右移运算符>>>

来源:互联网 收集:自由互联 发布时间:2023-09-03
(目录) 符号位 二进制形式最左边的第一位是符号位 0表示正数 1表示负数 例如 十进制:1二进制原码:00000000 00000000 00000000 00000001十进制:-1二进制原码:10000000 00000000 00000000 00000001 左移

(目录)

符号位

二进制形式最左边的第一位是符号位

  • 0表示正数
  • 1表示负数

例如

十进制:1
二进制原码:00000000 00000000 00000000 00000001

十进制:-1
二进制原码:10000000 00000000 00000000 00000001

左移运算符<<

规则:丢弃左边指定位数,右边补0

示例

// 相当于 4 * 2^1 = 8
System.out.println(4 << 1); // 8

二进制计算

4 << 1

  00000000 00000000 00000000 00000100
=>
0|00000000 00000000 00000000 00001000

右移运算符>>

规则:丢弃右边指定位数,左边补上符号位

示例

// 相当于 4 / 2^1 = 2
System.out.println(4 >> 1); // 2

// 相当于 -4 / 2^1 = -2
System.out.println(-4 >> 1); // -2

二进制计算

-4 >> 1

原码:10000000 00000000 00000000 00000100
反码:11111111 11111111 11111111 11111011
补码:11111111 11111111 11111111 11111100
=>
补码:11111111 11111111 11111111 11111110|0
反码:11111111 11111111 11111111 11111101
原码:10000000 00000000 00000000 00000010

无符号右移运算符>>>

规则:丢弃右边指定位数,左边补上0

示例

System.out.println(4 >>> 1); // 2
System.out.println(-4 >>> 1); // 2147483646

二进制计算

-4 >>> 1

原码:10000000 00000000 00000000 00000100
反码:11111111 11111111 11111111 11111011
补码:11111111 11111111 11111111 11111100
=>
补码:01111111 11111111 11111111 11111110|0

其他

右移32位,相当于没有移动

// 移动位数大于等于32位操作时,会先求余(%)后再进行移位操作
System.out.println(4 >> 32); // 4
System.out.println(4 >> 0); // 4

参考文章

  • Java中的移位运算符
  • 原码、反码、补码及减法运算
上一篇:JAVA-Hibernate
下一篇:没有了
网友评论