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

当我运行这个程序时,控制台的显示有无限的数字 1。我不明白这是怎么发生的。请帮我退出这个程序......这是由于波浪号运算符,如果是原因,那怎么办?

4

4 回答 4

7

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

基本上,~i将始终低于5(嗯,比你的情况),因为它会为大于0的值返回一个负数。当您达到最大数量时,将溢出并因此遇到未定义的行为。i0inti++

在那之前,你会1打印出来,因为那是*x返回的。

于 2012-10-31T15:20:39.127 回答
0

波浪号是按位逆运算符。所以〜0x00000000 = 0xFFFFFFFF或-1。增加 i 会使这个运行很长时间,几十亿次迭代。

于 2012-10-31T15:20:43.563 回答
0

~ 运算符是按位非。由于 int 的带符号性质,按位 NOT 使数字为负数,小于 5。为您尝试做的事情摆脱它。

于 2012-10-31T15:21:06.693 回答
0

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

于 2012-10-31T15:23:32.497 回答