#include<iostream.h>
void main()
{
int x[]={1,2,3,4,5};
for(int i=0;~i<5;i++)
{ cout<<*x;
}
}
当我运行这个程序时,控制台的显示有无限的数字 1。我不明白这是怎么发生的。请帮我退出这个程序......这是由于波浪号运算符,如果是原因,那怎么办?
是的,这是由于按位 NOT 运算符( ~
)和未定义行为的组合。
基本上,~i
将始终低于5
(嗯,比你的情况),因为它会为大于0
的值返回一个负数。当您达到最大数量时,将溢出并因此遇到未定义的行为。i
0
int
i++
在那之前,你会1
打印出来,因为那是*x
返回的。
波浪号是按位逆运算符。所以〜0x00000000 = 0xFFFFFFFF或-1。增加 i 会使这个运行很长时间,几十亿次迭代。
~ 运算符是按位非。由于 int 的带符号性质,按位 NOT 使数字为负数,小于 5。为您尝试做的事情摆脱它。
该~
运算符是 BITWISE NOT 布尔运算符。所以你的循环是无限的,因为计数器是一个int32
,并且按位非的结果总是一个负数。