Java中的左移、右移和无符号右移运算符,哪个叫法最绕口?

2026-04-19 12:321阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计524个文字,预计阅读时间需要3分钟。

Java中的左移、右移和无符号右移运算符,哪个叫法最绕口?

(目录)+ 符号位 + 二进制形式最左边的一位是符号位+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

右移运算符>>

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

示例

Java中的左移、右移和无符号右移运算符,哪个叫法最绕口?

// 相当于 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中的移位运算符
  • 原码、反码、补码及减法运算

本文共计524个文字,预计阅读时间需要3分钟。

Java中的左移、右移和无符号右移运算符,哪个叫法最绕口?

(目录)+ 符号位 + 二进制形式最左边的一位是符号位+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

右移运算符>>

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

示例

Java中的左移、右移和无符号右移运算符,哪个叫法最绕口?

// 相当于 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中的移位运算符
  • 原码、反码、补码及减法运算