yihayoooooo 发表于 2020-4-3 22:10:10

while语句

#include <stdio.h>

int main()
{
      signed char i = 0;

      while (i <= 0)
      {
                printf("%d", i);
                i = i - 1;
      }

      return 0;
}

为什么会打印出0到-128?

sunrise085 发表于 2020-4-3 22:27:56

因为signedchar范围是-128~127,i一直向下自减,到了-128之后,再减一就变成127了,那时就不符合循环条件了

jackz007 发表于 2020-4-3 22:34:23

   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) ;
}

鱼尧呀 发表于 2020-4-4 16:25:03

科普:
signed char取值范围是 -128 到 127(有符号位)
unsigned char 取值范围是 0 到 255
回答:
从0到-128都是满足条件的输出,是可以输出的,但是再减一就超出了signed char的可表示范围,就只能跳出循环啦。
页: [1]
查看完整版本: while语句