这个简单的c程序的输出很难理解

时间:2016-11-11 07:11:26

标签: c

我在C中写了波纹管代码。

#include <stdio.h>

int main()
{
   char c;
   c=400;
   printf("%d",c);
}

输出为-112。为什么? 如果我使用unsigned char,输出将是144.为什么?

2 个答案:

答案 0 :(得分:2)

感谢所有用户。

从我在评论中看到的内容,我得出了结论所有讨论的结论。 表示签名类型有3种不同的方式。

  1. 签名幅度
  2. 1的补充
  3. 2的补充
  4. 并且在所有这些表示中,如果最高有效位为1,则该数字为负,如果为0,则该数字为正。 因此,在这个问题中,我的计算机使用2的补码。因此,10010000是2的补码。它的值等于01110000 = 112的负数,所以实际结果是-112。

    但是,当类型为无符号时,则值400必须转换为二进制表示,但只有8位数的空间。因此,表示将为1001 0000,因为这是无符号的,所以它等于2 ^ 7 + 2 ^ 4 = 144。

答案 1 :(得分:0)

整型常量的类型是int,当它被赋值给char类型时,它以实现定义的方式转换。

满足结果的实现在概念上如下工作:从值中添加或减去类型的范围(在这种情况下为256),直到值可以由类型表示。

在这种情况下,char的范围是:[ - 128,127],400不能用char类型表示。

减去256,结果144仍无法表示。

再次减去,结果-112可以表示。