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值为~-10 ,因此while循环停止执行。 的! 运算符的工作原因是它完全不同的东西; 它导致1表示0值, 0表示所有其他值。 ~是一个按位否定。

更详细一点:

  • ~取一个数字中的每一位并切换它。 因此,例如,10010 2将变为01101 2
  • 当二进制补码有符号整数时, -1是二进制的全1。
  • ~0b…111111110

然而:

  • !01!anythingElse0
  • -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