C语言基本类型字节数


前言

在C语言中,基本数据类型的字节数取决于具体的编译器和目标平台(如32位或64位系统)。然而,C标准对这些类型规定了最小的大小限制。以下是一些常见平台上的典型字节数:


一、标准基本类型及其字节数

  • 字符类型
    char:至少1字节(8位)
    通常用于表示单个字符。

  • 整数类型
    short int 或 short:至少2字节
    int:至少2字节,通常是4字节(32位系统)或4字节(64位系统)
    long int 或 long:至少4字节,通常是4字节(32位系统)或8字节(64位系统)
    long long int 或 long long:至少8字节

  • 无符号整数类型
    unsigned char:至少1字节
    unsigned short int 或 unsigned short:至少2字节
    unsigned int:至少2字节,通常是4字节(32位系统)或4字节(64位系统)
    unsigned long int 或 unsigned long:至少4字节,通常是4字节(32位系统)或8字节(64位系统)
    unsigned long long int 或 unsigned long long:至少8字节

  • 浮点类型
    float:通常4字节
    提供大约7位十进制数字的精度。
    double:通常8字节
    提供大约15位十进制数字的精度。
    long double:至少10字节,通常是12字节(某些32位系统)或16字节(某些64位系统)
    C99 和 C11 引入的固定宽度整数类型

指针类型
void*, char*, int*, 等等:指针的大小取决于平台架构:
32位系统上通常是4字节。
64位系统上通常是8字节。

二、固定宽度整数类型

为了提供更明确的字节宽度,C99和C11标准引入了 <stdint.h> 头文件中的固定宽度整数类型。这些类型确保在所有平台上具有固定的字节数:

  • 整型类型:
    int8_t 和 uint8_t:1字节
    int16_t 和 uint16_t:2字节
    int32_t 和 uint32_t:4字节
    int64_t 和 uint64_t:8字节

  • 最大宽度的整数类型:
    int_least8_t 和 uint_least8_t:至少1字节
    int_least16_t 和 uint_least16_t:至少2字节
    int_least32_t 和 uint_least32_t:至少4字节
    int_least64_t 和 uint_least64_t:至少8字节

  • 最快宽度的整数类型:
    int_fast8_t 和 uint_fast8_t:至少1字节
    int_fast16_t 和 uint_fast16_t:至少2字节
    int_fast32_t 和 uint_fast32_t:至少4字节
    int_fast64_t 和 uint_fast64_t:至少8字节


三、查看具体平台的字节数

为了确定特定平台上的字节数,可以使用 sizeof 运算符进行检查。例如:

#include <stdio.h>

int main() {
    printf("Size of char: %zu byte(s)\n", sizeof(char));
    printf("Size of int: %zu byte(s)\n", sizeof(int));
    printf("Size of float: %zu byte(s)\n", sizeof(float));
    printf("Size of double: %zu byte(s)\n", sizeof(double));
    printf("Size of long: %zu byte(s)\n", sizeof(long));
    printf("Size of long long: %zu byte(s)\n", sizeof(long long));
    printf("Size of pointer: %zu byte(s)\n", sizeof(void*));

    return 0;
}

这段代码会输出各种基本类型的字节数,帮助你确认当前平台的具体情况。


总结

虽然C标准规定了基本类型的最小大小,但实际的字节数可能因编译器和平台而异。为了确保跨平台的一致性,建议使用 <stdint.h> 中定义的固定宽度整数类型,并利用 sizeof 运算符来验证具体平台上的类型大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张玉立

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值