如果有字段定义为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; |
| std::cout << std::boolalpha << (b2.f2 >= 0) << std::endl; |
| } |
| #include <iostream> |
| #include <cstring> |
| using namespace std; |
| |
| struct Flags { |
| uint32_t k1 : 1; |
| }; |
| |
| struct AA { |
| |
| 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); |
| } |
| } |
| |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现