if (~mask == 0){...}
Run Code Online (Sandbox Code Playgroud)
我在其中一个.cpp文件中遇到过这个东西,我想知道在c/c ++中是什么意思?
对于mask以下列位表示命名的8位无符号整数:
0010 1100
Run Code Online (Sandbox Code Playgroud)
价值~mask是:
1101 0011
Run Code Online (Sandbox Code Playgroud)
注意所有位都是如何翻转的.
为了你的if条件(~mask == 0)评估为真:
~mask: 0000 0000
mask: 1111 1111
Run Code Online (Sandbox Code Playgroud)
在这种情况下,mask有价值255.
根据需要,将相同的逻辑应用于不同位宽和符号的整数.
(注意:实际上,如果你的系统有32位ints,~mask即使mask是8 位也是32 位.这是因为~执行整体提升.但是,我忽略了上述简单例子的这一事实.)
这是正式的定义:
[C++11: 5.3.1/10]:操作数˜应具有整数或无范围的枚举类型; 结果是其操作数的一个补码.执行整体促销.结果的类型是提升的操作数的类型.unary-expression中 存在歧义˜X(),其中X是class-name或decltype-specifier.解决歧义有利于将其˜视为一元补语,而不是将其˜X视为指向析构函数.
正如段落提醒我们的那样,不要在类析构函数名称中使用按位NOT来混淆前导字符.有趣的是~被选择用于析构函数; 可以说是因为人们可以将析构函数视为构造函数的相反(即逻辑NOT).
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |