【发布时间】:2018-01-20 18:23:18
【问题描述】:
我正在练习面试问题,但很难回答这个基本问题:
这个循环会执行多少次?
unsigned char half_limit = 150;
for (unsigned char i = 0; i < 2 * half_limit; ++i)
{
std::cout << i;
}
我的想法是,由于 unsigned int 仅达到 255,它将永远执行,因为当我在 255 时增加 unsigned char 时,它会恢复为 0?然而这种想法是错误的,更奇怪的是这是 cout 给我的输出:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������������������������������������������������������������������������������������
当我尝试使用以下内容限制外观时:
if (i <= 255)
std::cout << i;
else
break;
循环仍然是无限的。
我的问题是代码的预期结果是什么,为什么会这样?
【问题讨论】:
-
如果我没记错的话,这应该会导致无限循环。
-
但请注意“是什么让这是一个好的面试问题?”这里是题外话。
-
"if (i 显然总是正确的,因为
i是unsigned char。
标签: c++