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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...