各位好,今天在学习C语言的循环结构后在做练习题,遇到了研究后还是不理解的代码,想请教一下这段代码的原理,具体内容如下:
题目:“你能看出下边代码会打印哪个范围内的所有数值呢?”
#include <stdio.h>
int main()
{
signed char i = 0;
while (i <= 0)
{
printf("%d", i);
i = i - 1;
}
return 0;
}
我的答案:char数据类型长度为一个字节,而signed char的取值范围为 -128到127,所以会输出0到-127范围内的所有整数。
正确答案:会输出 0 到 128 范围内的所有整数。
我的疑问:我理解有符号的char数据类型的范围是-128到127,循环中的代码是不断递减i直至-127并输出对应数值,但是经过单步调试后发现这个循环到-128后,下一个循环变为127(到这一步我还理解),但再下一个循环之后程序就结束了,并且输出了0 ~ 128 范围内的所有整数,但是为什么会输出了0-128这个范围内的所有整数而不是0到-127范围内的所有整数呢?
还请指点迷津,谢谢!