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