Java 中的波浪号运算符

2025年3月17日 | 阅读 3 分钟

按位补码运算符属于一元运算符(仅处理单个操作数)。它接受一个数字并反转其所有位。当在位上应用按位运算符时,所有 1 都变成 0,反之亦然。按位补码的运算符是 ~(波浪线)。

示例

输入 ~ 0000 0011

输出 1111 1100

输入 1110 0111

输出 0001 1000

应谨慎使用按位补码运算符。如果结果存储在无符号变量中,则 ~ 波浪线运算符对一个小数字的结果可能是一个大数字。此外,如果结果存储在有符号变量中(假设负数以 2 的补码形式存储,其中最左边的位是符号位),结果可能是一个负数。

输入

n = 2

2 的二进制形式 = 0010

2 的波浪线运算符 = ~ 0010 = 1101

1101 的十进制值是 13。

预期输出:13

正确输出:-3

编译器返回的是 2 的补码。

示例 1:用于演示波浪线运算符的程序

输出

Tilde Operator in Java

解释: 2 的波浪线 (~2) 是 -3 而不是 13。但是,为什么呢?

当以十进制(基数为 10)打印数字时,NOT 运算的结果可能会令人惊讶。特别是,正数可能会变成负数,反之亦然。

让我们首先找到 2 的按位补码(即 -3)的二进制表示。

负数以正数的 2 的补码形式存储。

2 的补码

2 的补码适用于二进制数。一个数的 2 的补码等于该数的 1 的补码加 1。

示例

2 的波浪线运算 (~ 0010) 是:1101

现在计算 3 的 2 的补码

3 的二进制形式 = 0011

现在将 3 的 1 的补码加 1 = 1100

将 1 的补码加 1 = 1100 +1

3 的 2 的补码 = 1101

注意

2 的按位补码与 -3 的二进制表示相同

  1. 对于任何数字 n,n 的按位补码将是 - (n+1)。
  2. N 的按位补码 = ~N(以 2 的补码形式表示)。
  3. ~N 的 2 的补码 = - (~(~N)+1) = - (N+1)。

示例 2:计算 2 的补码的程序

Main.java

输出

Tilde Operator in Java