#include<iostream.h>
void main()
{
int x[]={1,2,3,4,5};
for(int i=0;~i<5;i++)
{ cout<<*x;
}
}
当我运行此程序时,控制台的显示具有无限数量1。 我不明白这是怎么发生的。请帮我解决这个问题...... 那是因为代字号运算符,如果它的原因又如何呢?
答案 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的结果总是负数。