wiggle标志在c / c ++中意味着什么?

时间:2013-02-08 17:41:20

标签: c++ c

if (~mask == 0){...}

我在其中一个.cpp文件中遇到过这个问题,我想知道在c / c ++中是什么意思?

5 个答案:

答案 0 :(得分:8)

这是tilde,在C ++中,它意味着bitwise NOT

对于名为mask的8位无符号整数,其位代表如下:

0010 1100

~mask的值是:

1101 0011

注意所有位是如何翻转的。

要使if条件(~mask == 0)评估为真:

~mask: 0000 0000
 mask: 1111 1111

在这种情况下,mask的值为255

根据需要,将相同的逻辑应用于不同位宽和符号的整数。

注意:实际上,如果您的系统有32位int s,即使~mask mask也是32位是8位。这是因为~执行整数提升。但是,我忽略了上述简单例子中的这一事实。)


这是正式的定义:

  

[C++11: 5.3.1/10]: ˜的操作数应具有整数或无范围的枚举类型;结果是其操作数的补码。执行整体促销。结果的类型是提升的操作数的类型。 一元表达式 ˜X()中存在歧义,其中X类名 decltype-specifier 。解决歧义有利于将˜视为一元补充,而不是将˜X视为指向析构函数。

正如段落提醒我们的那样,不要将{em>按位NOT 与the leading character in the name of a class destructor混淆。有趣的是,~被选为析构函数;可以说是因为人们可以将析构函数视为构造函数的反面(即逻辑 NOT )。

答案 1 :(得分:4)

这有点不对。它反转变量的所有位。 在这种情况下,如果“mask”的所有位都是1,则if为true。

答案 2 :(得分:1)

在C中称为按位补码运算符

它反转(提升的)操作数的所有位(0变为11变为0

if (~mask == 0){...}

检查mask的所有位是否都设置为1

答案 3 :(得分:0)

It's a bitwise not operation.

(它被称为“代字号”。)

答案 4 :(得分:0)

它的按位不....它给出了给定数字的二进制表示的补码! 就像你写的那样     B =(〜A); 和a等于11,其二进制表示为0000 1011 ...它将给出 ... b = 1111 0100二进制