我想知道如何在c中存储数据类型,所以我写了一个程序来检查值的存储方式。当我看到输出时,我不明白不同的数据类型如何在内存中存储值。这是我尝试过的程序,#include <stdio.h>int main() { int x; int valI, i; short valS; long valL; signed valSi; unsigned valUn; // printf("enter a num"); // scanf("%d",&x); x = -10; valI = x; valS = x; valL = x; valSi = x; valUn = x; printf("\n\t%i\t%li\n",valI,sizeof(valI)); for(i = 8*sizeof(valI); i >= 0 ; i--) { printf("%i",(valI & (1<<i))? 1 : 0); } printf("\n\t%i\t%li\n",valS,sizeof(valS)); for(i = 8*sizeof(valS); i >= 0 ; i--) { printf("%i",(valS & (1<<i))? 1 : 0); } printf("\n\t%li\t%li\n",valL,sizeof(valL)); for(i = 8*sizeof(valL); i >= 0 ; i--) { printf("%i",(valL & (1<<i))? 1 : 0); } printf("\n\t%i\t%li\n",valSi,sizeof(valSi)); for(i = 8*sizeof(valSi); i >= 0 ; i--) { printf("%i",(valSi & (1<<i))? 1 : 0); } printf("\n\t%i\t%li\n",valUn,sizeof(valUn)); for(i = 8*sizeof(valUn); i >= 0 ; i--) { printf("%i",(valUn & (1<<i))? 1 : 0); } printf("\n\n");}输入的输出= 10输入num10 10 4000000000000000000000000000000000001010 10 200000000000001010 10 800000000000000000000000000000000000101000000000000000000000000000000000001010 10 4000000000000000000000000000000000001010 10 4000000000000000000000000000000000001010输入的输出= -10输入num-10 -10 4011111111111111111111111111110110110 -10 211111111111110110 -10 801111111111111111111111111111011011111111111111111111111111110110 -10 4011111111111111111111111111110110110 -10 4011111111111111111111111111110110110有人可以解释为什么会这样吗? &不同的数据类型如何将值存储在内存中?提前致谢 最佳答案 我想知道如何在C中存储数据类型徒劳地,那是没有道理的。数据的存储方式是实现细节(并且C99或C11标准未定义数据的存储方式),并且原则上您不应费心并尝试编写portable code。实际上,在名为Application Binary Interface的文档中指定了数据的存储和表示方式以及如何在函数调用等中进行传输。这些约定特定于处理器,通常特定于操作系统,随后是编译器(和其他工具)。请注意,某些数据可能不在内存中,例如仅在寄存器中。您可能会在two's complement,instruction sets,x86,calling conventions,x86 calling conventions,processor registers,address space,virtual memory,endianness,data-structure alignment,integer (computer science),,floating point,...对于IEEE floating point Linux,您可以阅读其x86-64。实际上,数据表示是机器和系统特有的。在ABI spec / ARM平板电脑上,在Android / Linux桌面上,在x86-64套件或Arduino大型机上,它是不同的(因此您的程序会在这些结果上产生不同的结果)。请注意,C99为您提供IBM System Z的标准类型,例如<stdint.h>,int32_t,uint64_t如果您关心intptr_t,请阅读有关interoperability的更多信息,并支持定义明确的文本格式(例如serialization)。