C 位段使用
什么是位段
段位的声明的结构类似,有两个不同:
1.位段的成员必须是int,unsigned int 或者signed int只要是整形就可以.
2.位段的成员名后边有一个冒号和一个数字
例如
struct S { int a : 2; int b : 5; int c : 10; int d : 30; }; int main() { struct S s; printf("%d\n", sizeof(s)); }
这里怎么计算大小的呢?
我们知道一个int是站32个比特位 这里的2就是比特位
2+5+10=17 他们相加都没有大于32 可以在一个int类型中 4个字节 但是在加30就超过32比特位了不能存储了就需要重新申请一个字节
这里一共申请了2个 就是8个字节长度
看一下他们的内存如何展示的 例如
struct S { char a : 3; char b : 4; char c : 5; char d : 4; }; int main() { struct S s = {0}; s.a = 10; s.b = 20; s.c = 3; s.d = 4; return 0; }
先存a 一个字节是8个比特位 这里a是3 可以使用3个比特位 记住是高位低存
0000 1010 用到了4个比特位但是只能存3个 就是 0000 0010
在去存b b是4个比特位 大小是20 接着a继续存
1010 0010 用了5个比特位 但只能存 4个就是 0010 0010
这里一共用了7个比特位了 最后一个比特位不够c存储 要重新申请一个字节
0000 0000
c是5个比特位存3
0000 0011
还剩3个不够d存了 重新申请
d是4个比特位存4
0000 0100
拼接起来16进制就是
2 2 0 3 0 4
0010 0010 0000 0011 0000 0100
b a c d
22 03 04 就是他的内存值
char 段位最大8 int 最大是32
从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· BotSharp + MCP 三步实现智能体开发
· 动物智能之数据标注员——狗篇
· 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
· 设计模式脉络
· 「硬核实战」回调函数到底是个啥?一文带你从原理到实战彻底掌握C/C++回调函数