C++ ~在C+中是什么意思+;?

C++ ~在C+中是什么意思+;?,c++,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

具体来说,您能告诉我这行代码的作用是什么吗:

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位被设置为零


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

7在二进制中是00000111,因此~7是11111000(假设一个8位字节)。代码作者正在使用它进行位屏蔽。

它是按位NOT。不要与逻辑Not(即!)混淆,后者翻转逻辑值(真到假,反之亦然)。此运算符翻转变量中的每一位。

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

如前所述,该代码的作用是将值四舍五入到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”的重复,在某些指令集中,这种方法将保存代码。

+1以获得正确答案。我只想指出,
~
也用于命名析构函数。通常用于形成位掩码。它可能不是位掩码-它可能只是四舍五入到最接近的8(出于某种原因)。这不仅仅是假设一个8位字节,而是一个1字节的
int
,这对于任何符合标准的C编译器来说都是一个错误的假设。我想他只是想避免写太多的二进制数字,同时用例子解释not操作。然而,可能不存在8位字节,所以他只是指定示例是在一个字节上生成的,并且该字节有8位。