我必须定义一个 bitset 类型来构建位数组。在这些数组之间可以执行和/或/xor之类的位操作(例如,比较它们)并且是主要操作。我应该使用什么类型作为 bitset 类型?
我认为该类型应该是编译器可以处理的最广泛的 NOT SIMULATED 类型。即,如果编译器模拟 64 位类型(例如,如果机器或操作系统不支持它)屏蔽简单和之间的复合操作,则应使用 32 位类型。如何确定?
还有更多问题:
新的 c99 标头定义了一些类型(精确宽度整数类型),其中:
“它们的形式是 intN_t 和 uintN_t。这两种类型都必须用 N 位表示,没有填充位。intN_t 必须编码为二进制补码有符号整数,uintN_t 必须编码为无符号整数。除非实现支持类型,否则这些类型是可选的宽度为 8、16、32 或 64,则应将它们类型定义为具有相应 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 独立)。
说说你对的看法。