gpt4 book ai didi

c++ - 带有 unsigned char 的 for 循环给出了意想不到的行为

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:06 28 4
gpt4 key购买 nike

我正在练习面试问题,但很难回答这个基本问题:

How many times will this loop execute?

  unsigned char half_limit = 150;

for (unsigned char i = 0; i < 2 * half_limit; ++i)
{
std::cout << i;
}

我的想法是,由于 unsigned int 仅达到 255,它将永远执行,因为当我在 unsigned char 为 255 时增加它时它会恢复为 0?然而,这种想法是错误的,更奇怪的是,这是 cout 给我的输出:

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������������������������������������������������������������������������������������������������������    

当我尝试使用如下内容限制外观时:

if (i <= 255)
std::cout << i;
else
break;

循环仍然是无限的。

我的问题是代码的预期结果是什么,为什么会这样?

最佳答案

这是一个无限循环。让我们一步步来看:

2 * half_limit

half_limitunsigned char但是2int .所以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在进行此检查之前。

关于c++ - 带有 unsigned char 的 for 循环给出了意想不到的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48359635/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com