C语言位域以及大小端的问题

学渣上确界 2017-10-26 09:52:43
C语言中有如下结构体
struct A
{
int a:4;
int b:4
}
现在小端机器上将A看成一个字节,解码得69(01000101),那么请问在实际的内存中69是如何按比特排序的并且对应到a,b的?
如果此事是在大端机里面又是如何布局的呢?
...全文
934 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuchouzhe 2017-11-01
  • 打赏
  • 举报
回复
C标准中没有规定位域分布的方式,大小端针对处理器体系,与C语言无关,Power和ARM部分处理器可以通过软件设置处理器大小端。 但位域中的数据确有大小端问题,可以将位域看做独立的整数进行处理,例如你的变量a虽然占4位,但这4位的大小端与处理器必然相关。
worldy 2017-10-27
  • 打赏
  • 举报
回复
01000101 应该是45不是69吧 a在低4位,b在高4位,你这个没存在大小端的问题,只有大于一个字节的才有大小端的说法
tianxj001 2017-10-27
  • 打赏
  • 举报
回复
理论上,位域用法。是按照由低到高来分配一个字段的。和所谓大小端格式无关。你这个例子,a占低四位,b占高四位。就那么简单。
tianxj001 2017-10-27
  • 打赏
  • 举报
回复
你这个定义的,int 是16位,你这里用位域定义了4位? 对于一个单8位的字节来说,无所谓大小端,这个你可要明白,只有int类型以上,才有大小端格式一说 结构体,理论上,先存储,先占位,最后的整个结构体当一个数据时候的结果,会根据大小端数据格式,和初始化数据顺序,有4种改变。至于推定到char类型,是不是也是这个规则,那还真没有测试过。

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧