C语言各数据类型所占字节数 - 知乎

编写 C 程序时需要考虑每种数据类型在内存中所占的内存大小,即使同一种数据类型在不同平台下所占内存大小亦不相同。为了得到某个类型在特定平台上的准确大写,可以使用 sizeof 运算符,表达式 sizeof(type) 得到对象或类型的存储字节大小

  • char 存储大小 1 字节,值范围 - 128~127;
  • unsigned char 存储大小 1 字节,值范围 0~255;
  • short 存储大小 2 字节,值范围 - 32768~32767;
  • unsigned short 存储大小 2 字节,值范围 0~65535;
  • int——

16 位系统存储大小 2 字节,值范围 - 32768~32767,
32、64 位系统存储大小 4 字节,值范围 - 2147483648~2147483647;

  • unsigned int——

16 位系统存储大小 2 字节,值范围 0~65535,
32、64 位系统存储大小 4 字节,值范围 0~4294967295;

  • long——

16、32 位系统存储大小 4 字节,值范围 - 2147483648~2147483647,
64 位系统存储大小 8 字节,值范围 - 9223372036854775808~9223372036854775807;

  • unsigned long——

16、32 位系统存储大小 4 字节,值范围 0~4294967295,
64 位系统存储大小 8 字节,值范围 0~18446744073709551615;

  • float 存储大小 4 字节,值范围 1.175494351*10-38~3.402823466*1038;
  • double 存储大小 8 字节,值范围 2.2250738585072014*10-308~1.7976931348623158*10308;
  • long long 存储大小 8 字节,值范围 - 9223372036854775808~9223372036854775807;
  • unsigned long long 存储大小 8 字节,值范围 0~18446744073709551615;
  • long double——

16 位系统存储大小 8 字节,值范围 2.22507*10-308~1.79769*10308,
32 位系统存储大小 12 字节(有效位 10 字节,为了对齐实际分配 12 字节),值范围 3.4*10^-4932 到 1.1*10^4932,
64 位系统存储大小 16 字节(有效位 10 字节,为了对齐实际分配 16 字节),值范围 3.4*10^-4932 到 1.1*10^4932;

  • 指针——

16 位系统存储大小 2 字节,
32 位系统存储大小 4 字节,
64 位系统存储大小 8 字节。

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(void)
{
    printf("数据类型:char,存储大小:%d字节、最小值:%hhd,最大值:%hhd\n",
                sizeof(char), CHAR_MIN, CHAR_MAX);
    printf("数据类型:unsigned char,存储大小:%d字节、最小值:%hhu,最大值:%hhu\n",
                sizeof(unsigned char), 0U, UCHAR_MAX);
    printf("数据类型:short,存储大小:%d字节、最小值:%hd,最大值:%hd\n",
                sizeof(short), SHRT_MIN, SHRT_MAX);
    printf("数据类型:unsigned short,存储大小:%d字节、最小值:%hu,最大值:%hu\n",
                sizeof(unsigned short), 0U, USHRT_MAX);
    printf("数据类型:int,存储大小:%d字节、最小值:%d,最大值:%d\n",
                sizeof(int), INT_MIN, INT_MAX);
    printf("数据类型:unsigned int,存储大小:%d字节、最小值:%u,最大值:%u\n",
                sizeof(unsigned int), 0U, UINT_MAX);
    printf("数据类型:long,存储大小:%d字节、最小值:%ld,最大值:%ld\n",
                sizeof(long), LONG_MIN, LONG_MAX);
    printf("数据类型:unsigned long,存储大小:%d字节、最小值:%lu,最大值:%lu\n",
                sizeof(unsigned long), 0LU, ULONG_MAX);
    printf("数据类型:float,存储大小:%d字节、最小值:%g,最大值:%g\n",
                sizeof(float), FLT_MIN, FLT_MAX);
    printf("数据类型:double,存储大小:%d字节、最小值:%lg,最大值:%lg\n",
                sizeof(double), DBL_MIN, DBL_MAX);
    printf("数据类型:long long,存储大小:%d字节、最小值:%lld,最大值:%lld\n",
                sizeof(long long), LLONG_MIN, LLONG_MAX);
    printf("数据类型:unsigned long long,存储大小:%d字节、最小值:%llu,最大值:%llu\n",
                sizeof(unsigned long long), 0LLU, ULLONG_MAX);
    printf("数据类型:long double,存储大小:%d字节、最小值:%Lg,最大值:%Lg\n",
                sizeof(long double), LDBL_MIN, LDBL_MAX);

    return EXIT_SUCCESS;
}

运行结果:

运行结果

源码地址:https://github.com/Hyacinth-fjk/CombinedLanguageIntroduction/blob/master/2.C%E8%AF%AD%E8%A8%80%E5%90%84%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E6%89%80%E5%8D%A0%E5%AD%97%E8%8A%82%E6%95%B0/extremum.c
https://zhuanlan.zhihu.com/p/98674721?ivk_sa=1024320u

相关知识

按照字节数对齐。

#ifndef ALIGN_UP
#define ALIGN_UP(val, align)  (((val) + ((align) - 1)) & (~((align) - 1)))
#endif

https://www.cnblogs.com/youxin/p/5161225.html

posted @ 2022-12-01 15:32  lingr7  阅读(668)  评论(0编辑  收藏  举报