我想不通的结果

A result that I can't figure out

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

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

unsigned char 只能取 0 到 255 之间的值。在您的代码中,在循环的每次迭代中,ab 都递增 1,直到 a 达到 255。当 a 为 255 并且应该再增加 1 时,它本来是 256,但是由于 unsigned char 只能取 0 到 255 之间的值,因此 a 需要值 0 而不是 256。然后,循环停止,因为 while(a!=0)b 将等于 256 - 1 = 255.