gpt4 book ai didi

c - c中的值如何存储在不同的数据类型中

转载 作者:行者123 更新时间:2023-12-04 12:34:14 25 4
gpt4 key购买 nike

我想知道数据类型是如何在 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 的输出

enter a num10    10      4000000000000000000000000000001010    10      200000000000001010    10      800000000000000000000000000000101000000000000000000000000000001010    10      4000000000000000000000000000001010    10      4000000000000000000000000000001010

输入 = -10 的输出

enter a num-10    -10     4011111111111111111111111111110110    -10     211111111111110110    -10     801111111111111111111111111111011011111111111111111111111111110110    -10     4011111111111111111111111111110110    -10     4011111111111111111111111111110110

有人可以解释为什么会这样吗? &不同的数据类型如何在内存中存储值?提前致谢

最佳答案

I want to know how data types are stored in C

迂腐地说,这没有任何意义。 数据的存储方式是一个实现细节(C99C11 标准没有定义数据的存储方式),原则上您不必担心并尝试写 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 , ....

对于 x86-64 Linux 你可以阅读它的 ABI spec .

在实践中,数据表示在很大程度上是特定于机器和系统的。你的ARM是不同的/Android平板电脑和您的 Linux/x86-64桌面和您的 Arduino套件或 IBM System Z大型机(因此您的程序会在这些上给出不同的结果)。

注意 C99 给你 <stdint.h> 使用标准类型,如 int32_t , uint64_t , intptr_t

如果你关心interoperability , 阅读更多关于 serialization并支持定义明确的文本格式(例如 JSON )。

关于c - c中的值如何存储在不同的数据类型中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33230061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com