Java中位取反运算符~如何影响二进制、补码及有符号数表示?

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

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

Java中位取反运算符~如何影响二进制、补码及有符号数表示?

本文字深入解析+

在 Java 中,int 是固定宽度、有符号、采用二进制补码(Two’s Complement)表示的 32 位整数类型。理解 ~(按位取反)的行为,必须紧扣这一前提。

以 int x = 2 为例:

  • 其二进制表示为(32 位,高位补零):
    00000000 00000000 00000000 00000010
  • 执行 ~x 后,每一位翻转:
    11111111 11111111 11111111 11111101

此时,该 32 位模式本身不携带“正/负”或“有/无符号”信息;它只是一串比特。Java 虚拟机(JVM)和 Java 语言规范强制规定:所有 int 值均按有符号补码解释。因此,我们需按补码规则将其转换为十进制:

  1. 最高位(bit 31)为 1 → 表示负数;
  2. 求其绝对值:对 11111111 11111111 11111111 11111101 再取反加 1:
    • 取反 → 00000000 00000000 00000000 00000010
    • 加 1 → 00000000 00000000 00000000 00000011 = 3
  3. 故原值为 -3。

这就是 ~2 == -3 的完整推导过程。

阅读全文
标签:Java

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

Java中位取反运算符~如何影响二进制、补码及有符号数表示?

本文字深入解析+

在 Java 中,int 是固定宽度、有符号、采用二进制补码(Two’s Complement)表示的 32 位整数类型。理解 ~(按位取反)的行为,必须紧扣这一前提。

以 int x = 2 为例:

  • 其二进制表示为(32 位,高位补零):
    00000000 00000000 00000000 00000010
  • 执行 ~x 后,每一位翻转:
    11111111 11111111 11111111 11111101

此时,该 32 位模式本身不携带“正/负”或“有/无符号”信息;它只是一串比特。Java 虚拟机(JVM)和 Java 语言规范强制规定:所有 int 值均按有符号补码解释。因此,我们需按补码规则将其转换为十进制:

  1. 最高位(bit 31)为 1 → 表示负数;
  2. 求其绝对值:对 11111111 11111111 11111111 11111101 再取反加 1:
    • 取反 → 00000000 00000000 00000000 00000010
    • 加 1 → 00000000 00000000 00000000 00000011 = 3
  3. 故原值为 -3。

这就是 ~2 == -3 的完整推导过程。

阅读全文
标签:Java