我如何使用 6 位来存储价值
How can i use 6 bits to store value?
我目前正在处理的数据单元(网络数据包标头(在其定义中有 2 个标志,存储在字节字段中并通过按位运算符访问。不幸的是,我只需要 2 位,并思考我可以用其他 6 位做什么?我可以使用它们来存储号码吗?
我可以使用它们来存储一些内部状态代码(值范围小于char
?(,而不仅仅是浪费它们。
是否有任何小于字节的数据类型,如何在C++中使用它们?如果没有,我应该浪费这些碎片并让它们没有意义吗?
您可以使用位字段,如此处所述。
改编自该页面:
#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++中,没有小于char
的数据类型,根据定义,这是一个字节。但是,您不需要专用数据类型来访问值的位。按位逻辑和按位移位运算符就足够了。
如果你不能忍受牺牲6位(这是假设8位字节(,你可能要考虑std::vector
使数据类型的单个(连续(位可通过名称访问的另一个选项是使用位字段:
struct S {
unsigned int flags : 2;
unsigned int state : 6;
};
static_assert( sizeof( S ) == 1, "Packing is implementation-defined." );
这声明了一个可以容纳两条信息的结构:flags
和 state
,分别占用 2 位和 6 位。相邻的位字段通常打包在一起(尽管此行为是实现定义的(。
相关文章:
- 使用QProcess执行命令,并将结果存储在QStringList中
- 类型总是使用其大小存储在内存中吗
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 使用 Xcode 将双精度存储在数组C++中
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 使用 char* 存储数据和产生的错误
- 使用成员函数和存储值定义书籍类
- 在地图中使用自定义删除器存储unique_ptr
- 创建一个数组,以允许用户输入存储并稍后在代码中使用
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 如何使用 redis-plus-plus 存储二进制数据,就像我想存储结构一样?@for_stack?
- 我如何在C 中的向量中存储和使用不同的类
- 如何在类的成员中存储函数?(使用函数作为回调)
- 将shared_ptr与通用注册表或共享对象存储一起使用.或不
- 存储可以使用不同派生类型初始化的基类型成员变量时,请避免使用new
- 在谷歌云存储中使用服务帐户获取OAuth令牌时'invalid_grant'错误
- 在注册表中存储和使用 Windows 句柄 (WId)