NOT(〜)vs NEGATION(!)
#include using namespace std; int main(int argc, char *argv[]) { int i=-5; while(~(i)) { cout<<i; ++i; } }
输出为-5,-4,-3,-2。 它不应该打印值直到-1?为什么它只到-2。 请解释一下’not’和’negation’运算符之间的区别。当我编写程序时,它们就是bug的来源。
while(i)
我知道循环条件对于正和负i都是正确的,除了0。
while(!i) vs while(~i)
对于’i’的值,上述两个循环是否被执行?
当i
达到-1
, ~i
值为~-1
或0
,因此while
循环停止执行。 的!
运算符的工作原因是它完全不同的东西; 它导致1
表示0
值, 0
表示所有其他值。 ~
是一个按位否定。
更详细一点:
-
~
取一个数字中的每一位并切换它。 因此,例如,10010 2将变为01101 2 - 当二进制补码有符号整数时,
-1
是二进制的全1。 -
~0b…11111111
是0
。
然而:
-
!0
是1
,!anythingElse
是0
-
-1
不是0
-
!-1
仍为0
如果你真的想循环包括i == -1
,只需使用while (i)
而不是while (~i)
。
你是正确的i == -1
是退出条件:你的循环相当于
int i=-5; while(i != -1) { cout<
以这种方式编写时,应该清楚为什么-1
不打印值首先打印,然后才增加,这就是为什么-2
是你打印的最后一个值。
的!
另一方面,运算符只有在给定零时才会产生1
。 这就是为什么循环会打印-1
时!
运算符用于循环条件。
‘〜’是运算符:~x = -x-1,当i = -1时,则~i = 0.如果你想知道~i的值,你可以打印出来:
#include using namespace std; int main(int argc, char *argv[]) { int i=-5; for (int i = -5; i <= 3; i++) { cout<
然后你会发现:-5 4 -4 3 -3 2 -2 1 -1 0 0 -1 1 -2 2 -3 3 -4