【问题标题】:A result that I can't figure out一个我想不通的结果
【发布时间】:2016-12-23 15:52:05
【问题描述】:

我最近一直在学习 C。 我很难理解下面代码的结果。 为什么b最后是255?

unsigned char a=1;
int b=0;
do
{
   b++;
   a++;
}while(a!=0);

【问题讨论】:

  • 你预计会发生什么?
  • 想想a 在每次循环迭代中所经过的值在达到 0 之前。(你明白为什么 a 最终会达到 0 吗?)
  • 要添加到@BilltheLizard 的评论中,请特别考虑a 的大小(以位为单位)以及它可以存储的可能数字的含义。
  • @BilltheLizard 其实我不明白。是关于 ASCII 的吗?
  • @Manhooo 不,这与 ASCII 无关。正如我在回答中解释的那样,unsigned char 是 0 到 255 之间的数字。ASCII 是将 0 到 255 之间的数字(最常见的是 char,有符号或无符号)转换为字符。

标签: c integer-overflow


【解决方案1】:

unsigned char 只能取 0 到 255 之间的值。在您的代码中,在循环的每次迭代中,ab 都会递增 1,直到 a 达到 255。当 a是 255,应该再增加 1,它本来应该是 256,但由于 unsigned char 只能取 0 到 255 之间的值,a 取值 0 而不是 256。然后,循环由于 @987654328 而停止@ 和 b 将等于 256 - 1 = 255。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-26
    • 1970-01-01
    相关资源
    最近更新 更多