[英]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.