繁体   English   中英

在C ++中〜是什么意思?

[英]What does ~ mean in C++?

具体来说,您能否告诉我这行代码的作用:

int var1 = (var2 + 7) & ~7;

谢谢

这是按位取反。 这意味着它将对数字的每一位执行二进制NOT运算符。 例如:

int x = 15; // Binary: 00000000 00000000 00000000 00001111
int y = ~x; // Binary: 11111111 11111111 11111111 11110000

与&运算符结合使用时,它用于清除位。 因此,在您的示例中,这意味着var2+7的结果的后3位被设置为零。

如注释中所述,它还用于表示析构函数,但在您的示例中并非如此。

此代码将var1舍入到最接近的n * 8数字。 &〜7将最后3位设置为0,向下舍入为8 * n。

这不是按位的。 不要与逻辑非(“!”)混淆,后者会将逻辑值翻转(从true到false,反之亦然)。 该运算符将变量的每一位翻转。

二进制中的7是00000111,所以〜7是11111000(假设是8位字节)。 代码作者正在使用它进行位屏蔽。

如前所述,代码的作用是将值四舍五入到下一个较高的八倍数。 我的首选公式是“ var1 =(var2 | 7)+1;” 但是要理解书面形式的表达,从外而内理解它是最有帮助的。

尽管“&”和“〜”是单独的运算符,但具有不同的优先级排序规则,但“ a = b&〜c;”的概念 是一个非常有用的函数,实际上,它应该拥有自己的运算符(除其他事项外,它将允许使用更明智的整数提升规则)。 基本上,“ a = b&〜c;” 用来抵消'b'中同样位于'c'中的任何位(如果'b'长而'c'不是,由于整数提升规则,我也要抵消更高的位)。 如果“ c”为2 ^ N-1,则表达式将抵消N个低位,这相当于向下舍入到2 ^ N的下一个倍数。

所写表达式在将结果四舍五入到下一个8的整数之前将7加到var2。如果var2是8的整数,则添加7不会完全达到8的下一个更高的整数。 因此,整个表达式将向上舍入为8的下一个倍数。

顺便说一句,我的首选公式是将数字四舍五入到下一个更高的值,该值短于8的整数倍,然后将其向上推至下一个整数。 它避免了魔术数字“ 7”的重复,并且在某些指令集中该方法将节省代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM