我正在练习面试问题,但我对这个基本问题很难:
这个循环执行多少次?
unsigned char half_limit = 150;
for (unsigned char i = 0; i < 2 * half_limit; ++i)
{
std::cout << i;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,因为unsigned int只达到255,所以它将永远执行,因为当我在255处递增unsigned char时它将恢复为0?然而,这种想法是错误的,更奇怪的是,这是输出cout给我的:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下内容限制外观时:
if (i <= 255)
std::cout << i;
else
break;
Run Code Online (Sandbox Code Playgroud)
循环仍然是无限的.
我的问题是代码的预期结果是什么,为什么会这样?
这是一个无限循环.让我们一步一步地看一下:
2 * half_limit
half_limit是unsigned char却2是int.所以half_limit升级到int结果是整数300.
i < 2 * half_limit
由于右手大小int,i也被提升为int.这里没有问题.
但是,++i没有任何促销活动,并且i是unsigned char宣布的.因此,在达到255它之后回到0并且条件i < 2 * half_limit始终是真实的,因为i永远不会达到300.
这种情况是同你的第二个条件if (i <= 255)为i追溯到0这个检查才制成.
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |