~i
在C++中是什么意思?
我刚注意到它等价于i != -1
,但我不确定。
int arr[3] {1, 2, 3};
int n = 3;
for (int i = n - 1; ~i; i--) {
cout << arr[i] << ' ';
}
它将数组以相反的顺序打印出来。
~i
在C++中是什么意思?
我刚注意到它等价于i != -1
,但我不确定。
int arr[3] {1, 2, 3};
int n = 3;
for (int i = n - 1; ~i; i--) {
cout << arr[i] << ' ';
}
它将数组以相反的顺序打印出来。
~
是按位取反运算符。当且仅当i的所有位都为1时,~i
的值为0。关于-1是否具有所有位都为1,取决于如何在系统中表示有符号数。在二进制补码表示法中,-1用所有位都为1来表示,因此在这种系统中,~(-1) == 0
。在一补数和二进制原码中都不成立。
因此,答案是否定的,不能在所有系统上成立。话虽如此,在现代机器(自90年代以来生产的所有机器)中,二进制补码相当普遍,因此在这种系统中,答案是肯定的。无论符号表示如何,i != -1
更易读。
~i
是按位取反运算符。也就是说,它会翻转 i
中的每一位。
-1 的二进制表示是将数字的每一位都设置为 1,将每一位取反得到的结果是 0。当在需要布尔值的位置检查整数时,0 被视为 false
,任何其他数字被视为 true
。
因此,在这种特殊情况下,~i
等同于 i != -1
。
-1
被表示为所有位都设置为 1。 - BiagioF
~
运算符仅仅是反转操作数的所有位。 - Jabberwocky~
反转所有位。在二进制补码中,当所有位都被设置时,-1
就是这个数。因此,当你反转所有位时,所有位都被重置,这会得到0
。这就是你的for
循环的false
强制转换。 - Blazei != -1
。 - StoryTeller - Unslander Monica