【发布时间】:2016-10-11 12:37:03
【问题描述】:
我知道 sizeof(char) 将始终为 1,并且以字节为单位,并且一个字节可以是任意位数(我相信任意位数大于或等于 8,但不是积极的)。
我还经常看到提到如何根据大小之间的关系来指定 C 数据类型大小的参考资料,例如“sizeof(int)
我的问题基本上是:在一个字节为 8 位且 int 为 39 位(或其他不能被 CHAR_BIT 整除的值)的系统上,“sizeof(int)”的计算结果是什么。
我的猜测是 sizeof() 返回存储类型所需的最小字节数,因此它会四舍五入到下一个字节。所以在我的 39 位 int 示例中,sizeof(int) 的结果将是 5。
这是正确的吗?
此外,是否有一种简单的方法可以确定特定类型可以容纳的位数,该方法是 100% 可移植且不需要包含任何标头的?这更多是为了学习体验而不是实际应用。我只会在实践中使用 stdint 类型。我在想可能是声明变量并将其初始化为〜0,然后循环并左移直到它为零。
谢谢!
【问题讨论】:
-
int在那种情况下不能是 39 位。您可以应用sizeof的任何类型都将包含整数个字节。 (位域可以有小数大小,但它们不是真正的类型,在它们上使用sizeof是错误的。) -
@EugeneSh。维基百科不具有权威性。
-
@sleeptightpupper 是这样吗?
-
@EugeneSh。我从来没有说过是。我只是说你不能链接到维基百科并说事实上的“答案就在里面”。唯一的权威来源是 C 标准。