结果我无法弄清楚

Man*_*ooo -2 c

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

unsigned char a=1;
int b=0;
do
{
   b++;
   a++;
}while(a!=0);
Run Code Online (Sandbox Code Playgroud)

Don*_*uck 6

一个unsigned char只能在0与255之间的值在代码中,在循环的每次迭代,a并且b都得到了1递增,直至a达到255时a为255,应由1以上,这本来是256,但由于一个递增unsigned char只取0到255之间a的值,取值0而不是256.然后,循环停止因为while(a!=0)b将等于256 - 1 = 255.

  • 建议阅读OP:https://en.wikipedia.org/wiki/Integer_overflow (2认同)