【发布时间】:2011-06-04 05:54:02
【问题描述】:
我必须定义一个 bitset 类型来构建位数组。 在这些数组之间,像和/或/异或这样的位操作可以 被执行(例如比较它们)并且是 主要业务。 我应该使用什么类型作为 bitset 类型?
我认为类型应该是最宽的 NOT SIMULATED 类型 编译器可以处理。 IE。如果编译器模拟 64 位类型(如果机器 或者操作系统不支持它,例如)掩蔽化合物 一个简单的和之间的操作,一个 32 位类型应该是 改为使用。 如何确定?
还有更多问题:
新的 c99 标头定义了一些类型(精确宽度 整数类型),其中:
“它们的形式是 intN_t 和 uintN_t。这两种类型都必须用 N 位表示,没有填充位。intN_t 必须编码为二进制补码有符号整数,uintN_t 必须编码为无符号整数。这些类型是可选的,除非implementation 支持宽度为 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 indipendent)。
说说你的看法吧。
【问题讨论】:
-
这种数据类型的用户肯定不希望它因平台而异吗?
-
@David:通常你为大型位集创建一个类型的数组,然后底层类型的大小无关紧要,因为它隐藏在实现中。它只是数组中保持不变的总位数。