while语句
#include <stdio.h>int main()
{
signed char i = 0;
while (i <= 0)
{
printf("%d", i);
i = i - 1;
}
return 0;
}
为什么会打印出0到-128? 因为signedchar范围是-128~127,i一直向下自减,到了-128之后,再减一就变成127了,那时就不符合循环条件了 signed char 的编码范围是 -128 ~ 127,-128 是 unsigned char 所能表达的最小值,如果继续减 1,将会发生溢出,同时,i 的值会变成 unsigned char 所能表达的最大值 127,于是, while (i <= 0) 的条件就不再成立,循环也就终止了。
试试下面的代码就能看明白:
#include <stdio.h>
main()
{
char c ;
c = -128 ;
printf("%d\n" , c) ;
c -- ;
printf("%d\n" , c) ;
} 科普:
signed char取值范围是 -128 到 127(有符号位)
unsigned char 取值范围是 0 到 255
回答:
从0到-128都是满足条件的输出,是可以输出的,但是再减一就超出了signed char的可表示范围,就只能跳出循环啦。
页:
[1]