大小端系统中位域的排布?

james_hw 2010-09-05 09:48:17


struct a
{
#ifdef big_endian
u8 dev:4;
u8 test:4;
#else
u8 test:4;
u8 dev:4
#endif
};



以上是我看到的一段代码。

关于大小端的区别我一直以为只体现在字节排布上,但是其对位域的排列是否也有不同?

现在我想验证一下,但是我只有小端系统,如何能够模拟来验证一下呢?

今天结贴!顶着有份!
...全文
760 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
geniusrui 2012-12-11
  • 打赏
  • 举报
回复
看来这个问题要从人和宇宙的关系讲起了 计算机中最基本的存储单元是0和1,一定要记牢了,对应于C语言的BIT。因此,大小端所谓的存储关系,最基本的单位是bit。 为什么我们通常讨论大小端,说的都是byte?那是因为大部分场景下byte是我们最小的“有意义”的单元。但当BYTE中每一个BIT都有它的含义的时候,就要以bit为最小单元了,LZ举的例子中,四个字节是最小单位,当然,也是要区分大小端的了。有人问,为什么四个bit(比如例子中的test)或者1个byte内部不需要继续细分呢?呵呵,这个自己想想吧,想懂了,这帖就没白看。 通常,在网络协议中,会大量用到这些知识。
朴青涵 2012-06-26
  • 打赏
  • 举报
回复
位域中数据位的排列和大小端也有关系,根本原因在于cpu的数据总线和地址总线的方向不同导致的!
chainyu 2010-09-10
  • 打赏
  • 举报
回复
关注此贴
Rex237 2010-09-06
  • 打赏
  • 举报
回复
"Bit endianness"

Main article: bit numbering
The terms bit endianness or bit-level endianness are seldom used when talking about the representation of a stored value, as they are only meaningful for the rare computer architectures where each individual bit has a unique address. They are used however to refer to the transmission order of bits over a serial medium. Most often that order is transparently managed by the hardware and is the bit-level analogue of little-endian (low-bit first), although protocols exist which require the opposite ordering (e.g. I²C). In networking, the decision about the order of transmission of bits is made in the very bottom of the data link layer of the OSI model.

维基百科 http://en.wikipedia.org/wiki/Little-endian#.22Bit_endianness.22
十八道胡同 2010-09-06
  • 打赏
  • 举报
回复
关注此贴
ForestDB 2010-09-06
  • 打赏
  • 举报
回复
顶LS的,只有靠近硬件工程师才考虑bit级的大小端了,比如内存的设计者,但是从软件角度来看,我们得到的抽象最小单位是byte了。
Thirty 2010-09-05
  • 打赏
  • 举报
回复
拿分的谢谢~
赵4老师 2010-09-05
  • 打赏
  • 举报
回复
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
cilluick 2010-09-05
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zhao4zhong1 的回复:]

VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
[/Quote]

我也是怎么想的^^
hastings 2010-09-05
  • 打赏
  • 举报
回复
据我所知,位域没有大小端的区别,区别在于各编译器的实现:
编译器把
struct a
{
u8 test:4;
u8 dev:4
};
中的test放在一个字节的低处还是dev放在低处。
当然:
struct a
{
unsigned short test:15;
unsigned short dev:1
};
形如上面这个位域多于8个的情况,位域的先后顺序依旧是编译器相关的,
但是对于其中的test位域,由于其大于8位,因此它的Bit位是大小端区分的~~~
kingstarer 2010-09-05
  • 打赏
  • 举报
回复
你的代码估计不能达到所要的效果

大小端在单个字节上是一样排列的
两个或以上字节(short以上)才有区别
canshui 2010-09-05
  • 打赏
  • 举报
回复
嗯! 目前我的脑袋里还没有大小端的概念……
james_hw 2010-09-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 keyixuexi 的回复:]
哈哈,来自这篇文章。。。。。。。。。。。。
http://blog.csdn.net/reiskie/archive/2007/06/11/1647605.aspx
[/Quote]

多谢,但是这个只能对字节的排布有说明,我想了解是否对位域有影响。
fengbangyue 2010-09-05
  • 打赏
  • 举报
回复
可能是为了使用端方便吧
fo1_sky 2010-09-05
  • 打赏
  • 举报
回复
好像是没有区别的
Qyee 2010-09-05
  • 打赏
  • 举报
回复
哈哈,来自这篇文章。。。。。。。。。。。。
http://blog.csdn.net/reiskie/archive/2007/06/11/1647605.aspx
Qyee 2010-09-05
  • 打赏
  • 举报
回复
Qyee 2010-09-05
  • 打赏
  • 举报
回复
shandongqujianwu 2010-09-05
  • 打赏
  • 举报
回复
直接晕了....
东大坡居士 2010-09-05
  • 打赏
  • 举报
回复
不知道位域还有大小端的区别,
是不是要满足统一标准才这么定的
加载更多回复(12)

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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