【发布时间】:2017-05-04 15:55:13
【问题描述】:
因此,我需要一个常量值来表示 int 中的最大位数,并且需要在编译时计算它以传递到 char 数组的大小。
添加更多细节:我正在使用的编译器/机器具有非常有限的 C 语言子集,因此所有标准库都无法工作,因为它们具有不受支持的功能。因此我不能使用 INT_MIN/MAX,因为我既不能包含它们,也不能定义它们。
我需要一个计算大小的编译时表达式。我想出的公式是:
((sizeof(int) / 2) * 3 + sizeof(int)) + 2
基于手工计算的 n 字节整数略微成功。
sizeof(int) INT_MAX characters formula
2 32767 5 7
4 2147483647 10 12
8 9223372036854775807 19 22
【问题讨论】:
-
你的意思是十进制位的最大个数吗?
-
@JohnBollinger:这是一个很好的观点。我假设十进制数字。如果 OP 想要二进制数字,那么请对我的答案投反对票。
-
感谢大家的回答,我应该更明确一点,我正在使用的编译器/机器不能包含任何标准库,因为它们具有不受支持的功能。因此,我也无权访问 MAX_INT 或 MIN_INT。
-
@BenSeawalker,如果您阅读了 chux 的答案和我的答案,您会发现虽然他们用
MAX_INT或MIN_INT描述了解决方案,但最终它们并不依赖于这些宏。 chux 确实依赖于CHAR_BIT,但用文字 8 替换它的风险很小。 -
话虽如此,每个符合标准的 C 实现,包括听起来像您正在使用的独立实现,都支持使用由标准库头文件的指定子集定义的功能。该子集包括
limits.h,其中定义了INT_MAX、INT_MIN和CHAR_BIT宏。如果您不能使用该标头,那么您的实现是不合格的。实际上,它不是 C。
标签: c