c - C语言中bitset类型使用什么类型

标签 c bitset

我必须定义一个位集类型来构建位数组。 在这些数组之间可以进行像和/或/异或这样的位操作 被执行(例如比较它们)并且是 主要业务。 我应该使用什么类型作为位集类型?

我认为该类型应该是最宽的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)。

告诉我你的看法。

最佳答案

没有一种简单的方法可以确定非模拟整数类型的最大大小,并且大多数人都懒得去尝试。您可以采用两种方法中的任意一种,这两种方法都有效。

  1. 决定使用 32 位整数,因为它们随处可用。
  2. 确定您将拥有一个配置宏(不一定是 SDL 中的宏)来控制您使用 32 位还是 64 位(或 16 位或 128 位)数据类型。您在配置构建时指定“正确”的值。

如果您想检测模拟与 native ,您可能会在具有各种乘法大小的测试程序上运行一些时序测试。

关于c - C语言中bitset类型使用什么类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6235040/

相关文章:

c - 拆分字符串函数

c - Dijkstra算法如何存储相邻节点?

c - 我如何知道 scanf 输入的是字符还是 float ?

c++ - bitset 操作的推荐做法是什么?

c++ - 使用 std::bitset 进行双重表示

c - 尝试在 C 中读取迷宫文本文件时出现 malloc 错误

c - xcb_poll_for_event,这个函数如何返回错误?

Java BitSet 奇怪的行为

c++ - std::bitset 的二进制序列化

c++ - bitset::operator[] == false/true 还是 bitset::test?