c语言long int怎么定义,C编程中Short,long和Long long int的区别?

C最初是为16位机器编写的,其中最快和最方便的整数大小是16位.这是原始的int类型.有时,程序员需要32位数字,所以那些是long int类型.

在适当的时候,人们将C移植到32位机器,其中最方便的字大小是32位.他们想继续使用int来表示原生单词大小,因为例如现实世界中的每个C程序都有int i;在某处,但有时,他们还需要使用16位数字来节省空间.所以那些成了短int类型.

时间过去了,C需要移植到64位机器上.到那时,有很多程序存在,假设长度正好是32位宽,不幸的是,很多程序也假设长度与指针,IPv4地址,文件偏移量相同,好的代码使用诸如size_t,uintptr_t和off_t之类的类型,但旧版本的系统库定义了它们的库函数使用时间很长,因此许多遗留代码也必须如此.自C99问世以来,标准库中也有类似int32_t这样的类型来指定精确的宽度,而Unix和Windows在不同的名称下使用了一段时间.

由于这些类型被用来表示相互矛盾的事情,今天的编译器给程序员提供了长32到64位宽的选择,而64位编译器也允许int为32或64位宽.至少有一个真正的编译器将int定义为64位(本机字长),但长达32位(因此系统库和代码仍然可以工作).标准委员会禁止在C11中:long long int现在保证至少与long int一样宽,而long int至少与int一样宽.

因为许多程序无法在不破坏的情况下长时间重新定义为64位,所以C需要一种新类型(至少)64位.到那时,标准委员会不愿意在头文件之外引入新的关键字,因此他们重新使用现有的关键字并将其命名为long long int.

简而言之,你不应该假设除了int之外的int和long意味着至少16位宽和快,long至少是32位宽,而在C11编译器上long至少和int一样宽但是没有比很长很长.出于一般目的,请使用int.如果需要数组索引,请使用size_t或ptrdiff_t.如果你想确定你可以保持一个超过32,767的数字,并且认真地期望有一天你可能需要在某个16位机器上运行,请使用来自< inttypes.h>的long或fast类型.如果您正在进行系统调用,请使用与其参数相同的类型.如果要将指针存储在整数类型中,请使用uintptr_t.如果您需要一个至少64位宽的数字,请使用long long,如果您确切知道所需的宽度,请使用exact-width类型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值