最近遇到一个问题,抽象如下:
int a = -10;
unsigned int b = 1;
for(int i = 0; i < a +b; i++)
{}
本意是循环10次就跳出的循环,但是却循环了好久,原因是什么呢。
当一个有符号数和无符号数相加,并且没有赋值给一个明确类型的变量时,会自动升级为无符号数,
那么这个 a +b 得到的值是一个趋近unsigned int 的大小,当然会循环很久了。
具体为什么会这样,需要了解补码相关资料。
最近遇到一个问题,抽象如下:
int a = -10;
unsigned int b = 1;
for(int i = 0; i < a +b; i++)
{}
本意是循环10次就跳出的循环,但是却循环了好久,原因是什么呢。
当一个有符号数和无符号数相加,并且没有赋值给一个明确类型的变量时,会自动升级为无符号数,
那么这个 a +b 得到的值是一个趋近unsigned int 的大小,当然会循环很久了。
具体为什么会这样,需要了解补码相关资料。