1

假设 C 中的整数由硬件规范处理还是在软件中处理?

通过整数,我指的是原始“int”

基本思想是,如果 C 中的整数不依赖于硬件,那么让 gcc 实现不同的整数处理程序会违反标准。这样,您可以拥有传统的 32 位 int 处理程序,然后您还可以拥有 256 位整数的处理程序,甚至可能是动态大小的 int。

我确实知道 long 和 long long,但我不确定它们是否独立于提供的硬件,我只想指定构建工具链时要使用的“int”处理程序的大小/类型。

我也理解这样做的危险(因为用 32 位整数编译器构建 256 位整数会很糟糕!),但是对于那些需要 gmp 库之类的代码,我认为它会使代码的可读性更好. 兼容性将是相同的,但依赖于编译器而不是代码本身。

疯狂的想法,我知道......但回到原来的问题:

假设 C 中的整数由硬件规范处理还是在软件中处理?

4

3 回答 3

5

标准说

“普通”int对象具有执行环境架构所建议的自然大小(大到足以包含在 header 中定义的范围INT_MIN内的任何值)。INT_MAX<limits.h>

并且对<limits.h>约束的描述INT_MIN最多为 -32767 且INT_MAX至少为 32767。因此,如果您的硬件有一个 12 位的字,则您必须使用两个字来表示int.

于 2009-07-26T13:18:00.280 回答
2

是的, int 将以本机大小处理。因此sizeof(int),根据您编译和运行的系统,可能会给您不同的值。an 的所有数学运算int都将由 CPU 的本机指令处理 - 比在软件中执行要快得多。如果您需要 int256,则需要自己编写。而且我确信那里有任意大小的整数库。

于 2009-07-26T13:18:29.717 回答
1

实现 256 位整数的 AC 实现将完全符合 C 标准(但请注意,它必须使 long int 和 long long int 至少也长那么长)。

然而,这种编译器生成的代码通常不会与同一平台上其他编译器生成的代码链接兼容,这也是在实践中没有这样做的原因之一。

于 2009-07-26T13:25:20.817 回答