c - 在 c11 中支持 BitSet

标签 c bitset c11

<分区>

我正在将一些用 Java 编写的代码移植到 C11。 Java 代码使用 BitSet 来翻转 vector 中的翻转位。我知道 c++ 有相应的 BitSet,但我不确定 c11 是否有类似的东西。我必须根据要求使用 c11。我不太熟悉 c11 中较新的函数集,因为我以前的大部分代码都是使用 ANSI-C 或 C99 编写的。

在 C (C11) 中是否可以使用类似的东西,或者我是否需要编写自己的函数来映射到内存组然后使用位运算符?

最佳答案

C(C11 或其他)本身没有 BitSet。 C 可以直接访问内存,因此您可以直接使用数据类型。例如,可以使用 uint8_t 设置一个 8 位的位,如下所示。

用法

uint8_t bitset = 0;
bitset = bitset | (1 << 4); // set 4th bit, like BitSet.set(4)
bitset = bitset & ~(1 << 3); // unset 3rd bit, like BitSet.clear(3)
bitset = ~bitset; // flip the bits, like BitSet.flip(0, 7)
bitset = bitset ^ (1 << 4); // flip the 4'th bit like BitSet.flip(4)

https://en.wikipedia.org/wiki/Bitwise_operations_in_C 阅读有关位运算符的更多信息

关于c - 在 c11 中支持 BitSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34549725/

相关文章:

c - 工作日查找器奇怪的行为

c++ - Bitsets 实际上是 Bools 吗?

java - 如何将整数的二进制表达式输入到java中的bitSet中

c - "type domain"和 "real type"是什么意思?

c - 字符串中的单词之间仅保留一个空格

c - 在 Excel 与记事本中打开 csv 文件

条件跳转或移动取决于未初始化的值

c++ - 对 Boost 的无序容器进行 `std::bitset` 或 `boost::dynamic_bitset<>` 的高效哈希

c - 如何在没有空终止符的情况下初始化 char 数组?

c - C 中 VLA 的问题