繁体   English   中英

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

[英]Is ~i really equivalent to i != -1?

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

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

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

它反向打印阵列。

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

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

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

因此,在这种特殊情况下, ~i等于i != -1

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

暂无
暂无

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

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