c – 3字节int和5字节长?

前端之家收集整理的这篇文章主要介绍了c – 3字节int和5字节长?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
C和C标准是否允许数字类型的大小不是二的幂?

以下约束是已知的:

> 16< = CHAR_BIT * sizeof(int)< = CHAR_BIT * sizeof(long)
> 32< = CHAR_BIT * sizeof(long)< = CHAR_BIT * sizeof(long long)
和其他十几个,其中典型的8位字节架构意味着2< = sizeof(int)&&& 4 <= sizeof(long)
这是否意味着sizeof(int)== 3&& sizeof(long)== 5是一个有效的行为?

如果是 – 是否有任何已知的编译器/架构以类似的方式行事?

解决方法

我认为3.9.1 / 2(C 98)很好地总结了这一点(紧随其后的是无符号类型的类似信息):

There are four signed integer types: “signed char”,“short int”,
“int”,and “long int.” In this list,each type provides at least as
much storage as those preceding it in the list. Plain ints have the
natural size suggested by the architecture of the execution
environment39) ; the other signed integer types are provided to meet
special needs.

基本上我们知道的是sizeof(char)== 1,每个“较大的”类型至少是一个大的,int是一个“自然”的体系结构大小(据我所知,“自然”)到编译器编写器).我们不知道像CHAR_BIT * sizeof(int)= 32等任何东西.还要记住,CHAR_BIT也不一定是8.

对于那些这些尺寸是本地使用的硬件,可以允许使用三个字节的int和5个字节长的字节.然而,我不知道任何这样的硬件/架构.

编辑:正如@Nigel Harper评论中所指出的那样,我们知道int必须至少为16位,长度至少为32位以满足范围要求.否则我们没有任何具体的大小限制,除了如上所述.

猜你在找的C&C++相关文章