我对输出感到困惑。所以我期望得到解释

时间:2019-09-14 13:28:12

标签: c input output

   #include <stdio.h>
    {
        char num = 127;
        num = num + 1;
        printf("%d", num);
      return 0;
     }
  

输出为:-128         我应该添加输出镜头

1 个答案:

答案 0 :(得分:0)

char是一个在大多数系统上都占用1个字节(8位)的a。您的实现似乎有char表示一个带符号的类型,但是在其他实现上,它可以是无符号的。有符号类型的最大值是2 ^(n-1)-1,其中n是位数。因此 char 的最大值为2 ^(8-1)-1 = 2 ^ 7-1 = 128-1 = 127。最小值实际上是-2 ^(n-1)。这意味着最小值是-128。当您添加超过最大值的东西时,它会溢出并循环回到最小值。因此,如果您要进行char算术,则为127 + 1 = -128。

您永远不会使用char进行算术运算。请改用signed charunsigned char。如果将char替换为unsigned char,程序将按预期打印128。请注意,仍然会发生溢出(无符号类型的范围是0到2 ^ n-1,因此,如果将1加到255,则unsigned char就会溢出,给您0)。