在C ++中使用'〜'有什么用?

时间:2012-10-31 15:18:16

标签: c++ pointers loops

#include<iostream.h>
void main()
{
   int x[]={1,2,3,4,5};
   for(int i=0;~i<5;i++)
      {    cout<<*x;
      }
}

当我运行此程序时,控制台的显示具有无限数量1。 我不明白这是怎么发生的。请帮我解决这个问题...... 那是因为代字号运算符,如果它的原因又如何呢?

4 个答案:

答案 0 :(得分:7)

是的,这是由于按位NOT运算符~和未定义行为的组合。

基本上,~i始终低于5(在您的情况下,好于0),因为它会为i更高的值返回负数比0。当您达到最大int个数字时,i++将会溢出,从而导致未定义的行为。

在此之前,您将打印1,因为这是*x返回的内容。

答案 1 :(得分:0)

Tilde是按位逆运算符。所以~0x000000000000 = 0xFFFFFFFF或-1。增加我会使这个运行很长一段时间,几十亿次迭代。

答案 2 :(得分:0)

〜运算符是一个按位NOT。由于int的签名性质,按位NOT使得数字为负数,小于5.为了你想要做的事情摆脱它。

答案 3 :(得分:0)

~运算符是BITWISE NOT布尔运算符。所以你的循环是无限的,因为计数器是int32,而按位NOT的结果总是负数。