📜  c++ 中的 ~ 是什么(1)

📅  最后修改于: 2023-12-03 15:29:52.213000             🧑  作者: Mango

C++ 中的 ~ 是什么

在 C++ 中,~ 是一元操作符,用于位取反运算。

当一个值经过位取反运算后,其二进制表示进行按位反转操作。具体地,每一位的 0 变成 1,1 变成 0。

以下是一个简单的示例:

int x = 29;      // 十进制 29 的二进制表示为 0001 1101
int y = ~x;      // 此时 y 的值为 -30,二进制表示为 1110 0010

注意到这里 y 的值为负数。这是因为在 C++ 中,整数以补码的形式存储,位取反运算实际上是等价于按位取反再加一,也就是说 ~x 等价于 -(x + 1)。

下面是对上述代码段的详细解释:

int x = 29;      // 十进制 29 的二进制表示为 0001 1101

这行代码定义了一个整型变量 x,并将其赋值为十进制数 29。将 29 用二进制表示时,最低位(即个位)是 1,表示 $2^0$ 这一项的系数为 1;次低位(十位)是 1,表示 $2^1$ 这一项的系数为 1;再往高位一位是 0,表示 $2^2$ 这一项的系数为 0。以此类推,直到最高位,它表示的是 $2^7$ 这一项的系数为 0,因为 29 所用的是一个 8 位二进制数的形式表示。

int y = ~x;      // 此时 y 的值为 -30,二进制表示为 1110 0010

这行代码定义了一个整型变量 y,并将其赋值为对 x 进行 ~ 操作的结果。由于 ~ 是一元操作符,因此它的优先级比算术运算符低,需要用括号将 x 括起来。

当 x 被 ~ 操作时,二进制表示进行按位反转操作,即从 29 对应的二进制数 0001 1101 变为 1110 0010。这里需要注意,C++ 中使用补码来进行整数的存储和运算。因此,1110 0010 在 C++ 中表示的是 -30。

综上,~ 是一元操作符,用于进行位取反运算。