linux 字节类型,int数据类型占几个字节?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

int 数据类型所占字节数由编译器根据 C 标准的实现决定的

C99 标准只明确规定了 int 类型的数值表达范围,具体可以参考头文件 limite.h(/usr/include/limite.h) 以及 stdint.h(/usr/include/stdint.h)。它并没有明确规定 int 数据类型的字长。

这样规定的好处是令 C 语言具有更好的移植性,编译器在具体实现时只要令 int 的字长足够描述 C 标准规定的数值范围即可。试想如果规定死了 int 的字长,万一目标平台处理器无法支持那该如何是好呢?例如在以前的 PDP-7 (unix 诞生地)上,其字长是 18 位,和我们常见的以 8 为基数的字长(8,16,32,64)很不相同,如果以字长来规定的话,在其上实现 C 标准就颇为麻烦。

所以,int 字长到底是多少要看编译器如何实现。原则上在满足 C 标准的前提下,为了发挥目标平台的处理效率,编译器设计 int 的字长时会尽量令其与目标平台处理器的字长相同。

根据 C99 标准中的规定,int 类型的数字范围至少应该能表达 -32767 -- +32767(Annex E

(informative) Implementation limits)。

#define INT_MAX +32767

#define INT_MIN -32767

因此,int 类型的字长至少需 16 位(2字节)。

综上所述,根据 int 表达范围(至少 2 字节)和执行效率(int 字长 = 处理器字长)这两个条件,在常见的 Intel 体系上,我们就会见到 int 的字长有 16位(2字节),32位(4字节),64位(8字节)等几种。具体长度可以通过 sizeof(int) 求出来。

一般来说,在做计算时我们通常不太需要关心 int 的字长(除非涉及符号和溢出),但涉及到位操作,或者系统边界领域如存储到文件、实现网络协议时,数据类型的字长就很重要了。

如果需要进一步了解 C 标准的细节的话,推荐直接看 C99 标准文档,可以直接到网上去搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值