[问题] big endian中bit field 的问题

楼主: ca5270 (兰陵哭哭生)   2022-12-28 00:50:43
各位大神好,小弟在最近的面试中碰到了这类的考题
Q:在big endian中B1.A1的值会是多少
小弟的想法是因为在little endian中会取REG_SET.B3[0]这个内存中的低7位,值为0x12,
所以在big endian中会取内存中的高7位,所以值为0x9,请问这样的想法正确吗
typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned long u32;
typedef union{
struct{
u8 A1 :7;
u8 :1;
u8 A2 :2;
u8 A3 :1;
u8 A4 :1;
u8 A5 :4;
u16 A6;
} B1;
u32 B2;
u8 B3[4];
} REG_SET
REG_SET.B3[0] = 0x12;
REG_SET.B3[1] = 0x34;
REG_SET.B3[2] = 0x56;
REG_SET.B3[3] = 0x78;
作者: chuegou (chuegou)   2022-12-28 01:46:00
同一个byte里面不需要考虑大小头欸 不对 我没考虑到bitfield....
作者: breeze08 (linuxer)   2022-12-28 01:51:00
差点被骗+1
作者: lin130917 (阿哲)   2022-12-28 03:33:00
0x21 吧我算错了 0x9 没错
作者: lc85301 (pomelocandy)   2022-12-28 13:34:00
用 qemu power pc 测是 0x9
作者: SocketAM2 (AM2)   2021-01-01 08:52:00
bitfield 是compiler impl defined吧,只给endian就考出题真的没问题吗?
作者: RadiationXen (Xen)   2021-01-01 11:36:00
bitfield的memory layout是implementation-defined
作者: james80351   2021-01-03 00:21:00
是群联考的吗?XD

Links booklink

Contact Us: admin [ a t ] ucptt.com