在 c 中找到一个 int 的位宽;最佳跨平台方法
Posted
技术标签:
【中文标题】在 c 中找到一个 int 的位宽;最佳跨平台方法【英文标题】:finding the bit-width of an int in c; best-cross platform method 【发布时间】:2014-01-11 22:46:00 【问题描述】:我需要知道我的代码正在运行的系统中本机 int 的宽度(大小),以位为单位。
我可以使用“sizeof”来获取字符的宽度,但是,我的理解是,在 C 规范中,char 没有分配特定数量的位。
那么找到 int 位宽的最佳跨平台方法是什么?
【问题讨论】:
"... 需要知道 ... 的宽度(大小),以位为单位。" 那么标题最好是:“finding the bit-宽度 ..."? 是的,我很抱歉 - 已编辑 【参考方案1】:打开limits.h
,您应该会看到有关特定平台整数限制大小的所有信息。
这是您确定int
中有多少位的方法:
#include <limits.h>
printf("Number of bits in an int: %zu\n", sizeof(int) * CHAR_BIT);
如果您对特定平台的float
和double
限制感兴趣,请打开float.h
。
【讨论】:
【参考方案2】:CHAR_BIT
(来自<limits.h>
)是char
中的位数,所以
sizeof(int) * CHAR_BIT
就是你要找的。p>
CHAR_BIT
在“5.2.4.2.1 整数类型的大小”中指定
符合 C99 标准。
添加: Open Group 规范可能会很有趣
http://pubs.opengroup.org/onlinepubs/7999959899/basedefs/limits.h.html状态:
限制 CHAR_BIT、SCHAR_MAX 和 UCHAR_MAX 的值是 现在需要分别为 8、+127 和 255。
【讨论】:
如果它是一个符合 Posix 的系统,你可以使用WORD_BIT
,fwiw。否则,不能保证int
中没有填充位。【参考方案3】:
如果每个字符不使用 8 位,我会感到非常惊讶。你可以用更多的字符填充一个字符,然后它应该像 0xFFFF 一样,看看它的值是什么。
【讨论】:
不要太惊讶!大于 8 位的字符实际上很常见。以上是关于在 c 中找到一个 int 的位宽;最佳跨平台方法的主要内容,如果未能解决你的问题,请参考以下文章