c语言long是多少位补码,是否保证“ long”至少为32位?

通过阅读C ++标准,我一直了解C ++中不可分割的基本类型的大小如下:

sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)

我从3.9.1 / 2推论得出:

有四种有符号整数类型:“ signed char”,“ short int”,“ int”和“ long int”。在此列表中,每种类型提供的存储量至少与列表中位于其前的存储量一样。普通整数具有执行环境的体系结构建议的自然大小

此外,char3.9.1 /将其大小描述为:

足够大,可以存储实现的基本字符集的任何成员。

1.7 / 1对此进行了更具体的定义:

C ++内存模型中的基本存储单元是字节。字节至少大到足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其位数由实现定义。

这使我得出以下结论:

1 == sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)

其中sizeof告诉我们类型是多少个字节。此外,实现定义的是一个字节中有多少位。我们大多数人可能习惯于处理8位字节,但标准表示n字节中有位。

Alf P. Steinbach 在这篇文章中说:

保证(至少)32位长。

我了解根据标准理解的C ++中基本类型的大小,这无可厚非。通常,由于初学者是错误的,所以我会轻视此声明,但是由于这是Alf,我认为值得进一步研究。

那么,你怎么说呢?标准是否保证长度至少为32位?如果是这样,请具体说明此保证的方式。我只是看不到。

C ++标准专门说,要了解C ++,您必须了解C(1.2 / 1)1

C ++标准隐式定义的值的最小极限的long能容纳是LONG_MIN- LONG_MAX 2

因此,无论a long有多大,它都必须足够大以将LONG_MIN保持为LONG_MAX。

但是Alf和其他人明确指出long至少必须为32位。这就是我要建立的。C ++标准明确指出,未指定字节中的位数(可以是4、8、16、42)。那么如何从能够容纳这些位数LONG_MIN-LONG_MAX到至少32位进行连接?

(1)1.2 / 1:以下引用文件对于应用本文件必不可少。凡是注日期的引用文件,仅所引用的版本适用。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本标准。

ISO / IEC 2382(所有部分),信息技术–词汇

ISO / IEC 9899:1999,编程语言– C

ISO / IEC 10646-1:2000,信息技术–通用多八位编码字符集(UCS)–第1部分:体系结构和基本多语言平面

(2)定义为:

LONG_MIN -2147483647 // -(2^31 - 1)

LONG_MAX +2147483647 //   2^31 - 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值