社区
驱动开发/核心开发
帖子详情
C语言位域以及大小端的问题
学渣上确界
2017-10-26 09:52:43
C语言中有如下结构体
struct A
{
int a:4;
int b:4
}
现在小端机器上将A看成一个字节,解码得69(01000101),那么请问在实际的内存中69是如何按比特排序的并且对应到a,b的?
如果此事是在大端机里面又是如何布局的呢?
...全文
936
4
打赏
收藏
C语言位域以及大小端的问题
C语言中有如下结构体 struct A { int a:4; int b:4 } 现在小端机器上将A看成一个字节,解码得69(01000101),那么请问在实际的内存中69是如何按比特排序的并且对应到a,b的? 如果此事是在大端机里面又是如何布局的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fuchouzhe
2017-11-01
打赏
举报
回复
C标准中没有规定位域分布的方式,大小端针对处理器体系,与C语言无关,Power和ARM部分处理器可以通过软件设置处理器大小端。 但位域中的数据确有大小端问题,可以将位域看做独立的整数进行处理,例如你的变量a虽然占4位,但这4位的大小端与处理器必然相关。
worldy
2017-10-27
打赏
举报
回复
0100
0101
应该是45不是69吧
a在低4位,b在高4位,你这个没存在大小端的问题,只有大于一个字节的才有大小端的说法
tianxj001
2017-10-27
打赏
举报
回复
理论上,位域用法。是按照由低到高来分配一个字段的。和所谓大小端格式无关。你这个例子,a占低四位,b占高四位。就那么简单。
tianxj001
2017-10-27
打赏
举报
回复
你这个定义的,int 是16位,你这里用位域定义了4位? 对于一个单8位的字节来说,无所谓大小端,这个你可要明白,只有int类型以上,才有大小端格式一说 结构体,理论上,先存储,先占位,最后的整个结构体当一个数据时候的结果,会根据大小端数据格式,和初始化数据顺序,有4种改变。至于推定到char类型,是不是也是这个规则,那还真没有测试过。
关于
大小
端
、位
域
的一些概念详解
大小
端
: 对于像C++中的char这样的数据类型,它本身就是占用一个字节的
大小
,不会产生什么
问题
。但是当数制类型为int,在32bit的系统中,它需要占用4个字节(32bit),这个时候就会产生这4个字节在寄存器中的存放顺序的
问题
。比如int maxHeight = 0x12345678,&maxHeight = 0x0042ffc4。具体的该怎么存放呢?这个时候就需要理解计算机的
大小
端
的原理了。 大
端
:(Big-Endian)就是把数值的高位字节放在内存的低位地址上,把数值的地位字节放在内存的高位地址上。 小
端
:(Little-Endian)就是把数字的高位字节放在高位的地址上,低位字节放在
C
语言
字节序比特序
1、
大小
端
的概念;2、结构体和联合体存储方式;3、位
域
的概念。
C++面试资料,认真看完6K应该没
问题
我看过的一些面试总结之类,好好的看完,应该是有帮助的,内存对齐,
大小
端
问题
,位
域
,线程同步,指针的各种变型,SQL中存储过程,行列转换(网上去找),这些都是最最基础的
问题
c
语言
位
域
操作与
大小
端
那些事
写在前面
c
语言
位段
大小
端
,bit 位
域
大小
端
转换
问题
bit 位
域
大小
端
转换
问题
计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C
语言
中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的
问题
。因此就导致了大
端
存储模式和小
端
存储...
驱动开发/核心开发
21,600
社区成员
21,708
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章