c++ - 我如何使用 6 位来存储值?

标签 c++ types bit-manipulation bit flags

我目前正在处理的数据单元(网络数据包 header )在其定义中有 2 个标志,存储在字节字段中并通过按位运算符访问。不幸的是,我只需要 2 位,我在想我能用其他 6 位做什么?我可以用它们来存储号码吗?

我可以使用它们来存储一些内部状态代码(值范围小于char吗?)并且不要浪费它们。

是否有任何小于字节的数据类型,我如何在 C++ 中使用它们?如果不是,我是否应该浪费这些位并让它们毫无意义?

最佳答案

您可以使用一个位字段,如所述here .

改编自该页面:

#include <iostream>
struct S {
 // 6-bit unsigned field,
 // allowed values are 0...63
 unsigned int b : 6;
};
int main()
{
    S s = {7};
    ++s.b;
    std::cout << s.b << '\n'; // output: 8
}

关于c++ - 我如何使用 6 位来存储值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418994/

相关文章:

scala - 类型别名和类型 lambda 之间的区别

database - 如何在关系数据库中为自定义类型建模?

c - 位运算 - 表示有符号整数的符号

c++ - 没有来自 std::vector<Object *, std::allocator<Object *>>"to "Object *"的合适转换函数

c++ - 让线程池的所有线程执行给定的函数

java - Java 类型系统中的错误?

c++ - 将无符号整数中两位设置为一位的最快函数

c++ - boost::none_t 实现的基本原理是什么?

c++ - gdb如何找到函数退出的位置

java - Java中的按位右移运算符