〜i真的等于i!= -1吗?

时间:2019-06-26 12:18:03

标签: c++ bitwise-not

~i在C ++中如何工作?

我刚刚注意到它等同于i != -1,但我不确定。

int arr[3] {1, 2, 3};
int n = 3;
for (int i = n - 1; ~i; i--) {
    cout << arr[i] << ' ';
}

它反向打印了阵列。

3 个答案:

答案 0 :(得分:14)

~是按位NOT运算符。当且仅当~i的所有位都为1时,i才为0。 -1是否具有所有位1取决于系统上符号号的表示方式。在二进制补码表示中,-1用所有位1表示,因此在这样的系统~(-1) == 0上。不论是在补语上,还是在符号和幅度上,都不成立。

因此,答案是否定的。并非在所有系统上。就是说,在现代机器(自90年代以来的所有产品)中,二进制补码是相当普遍的,在这样的系统上,答案是肯定的。但是,不管符号表示如何,i != -1都更具可读性。

答案 1 :(得分:5)

~i是按位NOT运算符。即它会反转i中的每一位。 -1表示二进制,因为数字的每一位都设置为1,将每一位都反转为0会得到0。并且在检查bool期望为0的整数时,将被视为false和其他任何值数字为true

因此,在这种特殊情况下,~ii != -1等效。

答案 2 :(得分:0)

因为for循环中的i变量为int类型,定义为有符号整数,因此在二进制补码中,其值-1的二进制表示形式为所有位,这意味着所有位均为1。边,全1的按位求反全为零,这就是您所需要的,直到i> = 0或i!=-1为止循环执行,因为您递减了i。在系统上对符号值进行按位运算的情况下,int具有二进制补码二进制表示形式,是的,它是相同的。