各种数据类型所占的字节


老是记不清这些数据类型占用多少位或者多少字节,汇总了一下,以便以后查询。

首先,1字节=8位,

其次,数据类型所占的字节数跟编译器的位数是有关系的编译器的位数是有关系的,所以如果通过sizeof()获取到的也不是完全可以的

同时规定sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)

C标准规定,char至少8位,short和int至少16位,long至少32位, long long至少64位。

如果问及short有几位,这个要根据编译器是几位的来确定,但是基本上所有的编译器都是占两个字节的。

在32位的系统中,int,float,long都占4个字节,short占2个字节,double占8个字节。

以下是看到别人总结出来的:

16位编译器
char :1个字节
char*(即指针变量): 2个字节
short int : 2个字节
int:  2个字节
unsigned int : 2个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节
32位编译器(比较常用)
char :1个字节
char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)
short int : 2个字节
int:  4个字节
unsigned int : 4个字节
float:  4个字节
double:   8个字节
long:   4个字节
long long:  8个字节
unsigned long:  4个字节

64位编译器
char :1个字节
char*(即指针变量): 8个字节
short int : 2个字节
int:  4个字节
unsigned int : 4个字节
float:  4个字节
double:   8个字节
long:   8个字节
long long:  8个字节
unsigned long:  8个字节


u8,u16,u32都是unsigned char类型,不过u8是一个字节的,u16是2字节,u32是4字节
u8 是 unsigned char
u16 是 unsigned short
u32 是 unsigned int

<think>嗯,用户问的是C语言各种数据类型字节数。这个问题看起来基础,但其实要准确回答的话需要注意不同系统和编译器的差异。首先,我得回忆一下C语言的基本数据类型,比如intchar、float、double这些,还有shortlonglong long以及派生类型如指针和枚举。 接下来,我得考虑不同环境下的字节大小。比如在32位和64位系统中,指针的大小可能不同,通常是4字节和8字节。但像int这样的类型,虽然通常是4字节,但在一些旧的系统或者嵌入式系统中可能不同。这时候应该强调这些差异,提醒用户实际使用时用sizeof运算符验证。 然后,可能需要组织一个表格,列出每种数据类型及其典型大小,同时说明这些大小可能变化的情况。比如char通常是1字节,但标准只是保证至少8位,而short通常是2字节int是4字节long在Linux 64位是8字节,而在Windows可能是4字节,这容易让人混淆,需要特别指出。 另外,用户可能没有明确说明他们的使用场景,比如是否涉及跨平台开发,这时候强调使用sizeof的重要性会更实用。还有,是否要包括C99新增的类型,比如stdint.h里的int32_t,或者unsigned类型?这些可能也需要简要提及,但根据问题描述,可能主要集中在基本数据类型上。 最后,检查是否有遗漏的类型,比如long double的大小差异,以及枚举类型通常和int相同。需要确保信息准确,同时避免误导用户认为这些大小是绝对固定的。可能还要举例子说明不同系统下的差异,比如在Windows和Linux中long的不同,这样用户能更清楚实际情况的多样性。</think>在C语言中,不同数据类型字节大小与编译器和操作系统相关。以下是典型情况下的字节分布(基于x86架构的64位Linux/gcc和Windows/MSVC环境): --- ### 一、基本数据类型 1. **`char`** - 用途:存储字符或小整数 - 字节数:**1字节** - 范围:`-128` 到 `127`(有符号) / `0` 到 `255`(无符号) 2. **`short` (或 `short int`)** - 用途:节省内存的小整数 - 字节数:**2字节** - 范围:`-32,768` 到 `32,767` 3. **`int`** - 用途:通用整数 - 字节数:**4字节** - 范围:`-2,147,483,648` 到 `2,147,483,647` 4. **`long`** - 字节数: - **4字节**(Windows/MSVC 64位) - **8字节**(Linux/gcc 64位) - 范围:与字节数对应(如8字节时范围为 $-9×10^{18}$ 到 $9×10^{18}$) 5. **`long long`** - 用途:超大整数 - 字节数:**8字节** - 范围:$-9×10^{18}$ 到 $9×10^{18}$ --- ### 二、浮点类型 1. **`float`** - 字节数:**4字节** - 精度:约6-7位小数 2. **`double`** - 字节数:**8字节** - 精度:约15位小数 3. **`long double`** - 字节数: - **16字节**(Linux/gcc) - **8字节**(Windows/MSVC) - 精度:系统依赖 --- ### 三、其他类型 1. **指针类型(如 `int*`)** - 字节数: - **4字节**(32位系统) - **8字节**(64位系统) 2. **枚举类型(`enum`)** - 字节数:通常与 `int` 一致(**4字节**) --- ### 四、验证方法 使用 `sizeof` 运算符直接获取类型大小: ```c printf("int size: %zu bytes\n", sizeof(int)); // 输出 int字节数 ``` --- ### 五、注意事项 - **平台差异**:例如 `long` 在Windows和Linux中的大小不同 - **标准保障**:C语言仅规定最小范围(如 `int` 至少为2字节),具体实现由编译器决定 - **跨平台开发**:建议使用 `<stdint.h>` 中的固定大小类型(如 `int32_t`) 如果需要精确控制内存,建议通过 `sizeof` 进行实际验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值