位域用法

如果有字段定义为int类型的话,那么符号位的判断需要特别注意。
例如:下面的 B::f2 字段是有符号类型,其符号位是f2的最高位,可以表示的范围是-64~63

#include <iostream>
struct B {
unsigned int f1:1;
int f2:7;
};
int main()
{
B b1 = {0, 10};
B b2 = {0, 127};
std::cout << std::boolalpha << (b1.f2 >= 0) << std::endl; // true
std::cout << std::boolalpha << (b2.f2 >= 0) << std::endl; // false
}
#include <iostream>
#include <cstring>
using namespace std;
struct Flags {
uint32_t k1 : 1;
};
struct AA {
// Flags flag : 1; // error: bit-field ‘flag’ with non-integral type ‘Flags’
Flags flag;
bool a1 : 1;
uint32_t a2 : 4;
};
int main()
{
cout << sizeof (AA) << endl;
AA obj;
memset(&obj, 0, sizeof(AA));
obj.flag.k1 = 1;
obj.a1 = 1;
obj.a2 = 0b1111;
uint64_t val = *(uint64_t *)(&obj);
int len = sizeof(AA) * 8;
for (int i = 0; i < len; i++) {
cout << ((val >> (len - 1 - i)) & 0x01);
}
}
// output:
// 8
// 0000000000000000000000000001111100000000000000000000000000000001
posted @   devin1024  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示