我必须定义一个位集类型来构建位数组。 在这些数组之间可以进行像和/或/异或这样的位操作 被执行(例如比较它们)并且是 主要业务。 我应该使用什么类型作为位集类型?
我认为该类型应该是最宽的NOT SIMULATED类型 编译器可以处理。 IE。如果编译器模拟 64 位类型(如果机器 或者操作系统不支持,例如)掩蔽化合物 简单和之间的操作,32位类型应该是 代替使用。 如何确定?
还有更多问题:
新的 c99 header 定义了一些类型(精确宽度 整数类型),其中:
“它们的形式为 intN_t 和 uintN_t。这两种类型都必须由恰好 N 位表示,没有填充位。intN_t 必须编码为二进制补码有符号整数,而 uintN_t 必须编码为无符号整数。这些类型是可选的,除非实现支持宽度为 8、16、32 或 64 的类型,则应将它们 typedef 为具有相应 N 的相应类型。任何其他 N 都是可选的。"
所以我认为检查 64 位类型的实现 这是第一步,对吧?
我的项目使用 SDL 库,#defines 一个宏:
#ifdef SDL_HAS_64BIT_TYPE
typedef int64_t Sint64;
#ifndef SYMBIAN32_GCCE
typedef uint64_t Uint64;
#endif
#else
/* This is really just a hack to prevent the compiler from complaining */
typedef struct {
Uint32 hi;
Uint32 lo;
} Uint64, Sint64;
#endif
所以也许我可以定义位集类型 取决于该宏(但是这不是最佳的, 因为我想独立编写代码 sdl)。
告诉我你的看法。
最佳答案
没有一种简单的方法可以确定非模拟整数类型的最大大小,并且大多数人都懒得去尝试。您可以采用两种方法中的任意一种,这两种方法都有效。
- 决定使用 32 位整数,因为它们随处可用。
- 确定您将拥有一个配置宏(不一定是 SDL 中的宏)来控制您使用 32 位还是 64 位(或 16 位或 128 位)数据类型。您在配置构建时指定“正确”的值。
如果您想检测模拟与 native ,您可能会在具有各种乘法大小的测试程序上运行一些时序测试。
关于c - C语言中bitset类型使用什么类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235040/