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

标签 c

我用 C 语言编写了以下代码。

#include <stdio.h>

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

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

最佳答案

感谢所有用户。

从我在评论中看到的内容,我得出了这个结论,这将结束所有讨论。 有 3 种不同的方式来表示有符号类型。

  1. 有符号的幅度
  2. 1 的补码
  3. 2 的补码

在所有这些表示中,如果最高有效位为 1,则该数字为负数,如果为 0,则该数字为正数。 因此,在这道题中,我的计算机使用2的补码。因此,10010000 是 2 的补码表示形式。它的值等于01110000=112的负数,所以实际结果是-112。

但是,当类型为无符号时,400 的值必须转换为二进制表示,但只有足够的空间容纳 8 位数字。因此,表示形式将为 1001 0000,并且由于这是无符号的,因此等于 2^7+2^4=144。

关于c - 这个简单的 C 程序的输出很难理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40542906/

相关文章:

clockid_t(clock_gettime 第一个参数)可移植性

c - 如何使用gets读入字符串数组?

c - 如何判断三个数是否相等

c - 如何使用 Simulink 外部模式在 Lego Mindstorms EV3 上发送和接收 UDP 数据包?

c - 在 C (C89) 中获取指向动态库的函数指针

C程序编译但不执行

c++ - fread 线程锁处于什么级别?他们需要达到什么水平?

c - qsort与功能比较器不同

c - 在多进程 scanf 的 MPI 中只接受一次输入并将垃圾值分配给其他?

c - GCC 别名在翻译单元之外运行 -AKA- 这甚至是完成这项工作的正确工具吗?