求大神指点 谢谢
struct mybitfields{
unsigned short a : 4;
unsigned short b : 5;
unsigned short c : 7;
} test
void main(void)
{
int i;
test.a = 2;
test.b = 3;
test.c = 0;
i = *((short *)&test);
printf("%d\n", i);
}
x86上的运行结果
这个 a占4个bit是0010
b 占 5个bit 00011
c 占7个bit 0000000
short 占2个字节 取8个bit
低地址放低地址处,高地址放高地址处
小端存储 为什么不是 0010 00011 0000000
求大神指点 谢谢谢谢 没看懂你是啥意思,你是说a b c的值应该在内存上连续排列?这里有个内存对齐的问题 yuxijian2020 发表于 2021-3-29 08:41
没看懂你是啥意思,你是说a b c的值应该在内存上连续排列?这里有个内存对齐的问题
内存对齐 就是16个字节 x86不是小端存储么在小端字节序下,把2传给test.a 就是0010 占4个比特位
然后test.b test.c 结构体中成员的地址不是由低到高 a 地址最低 ,c 最高对应小端不应该是
0010 00011 0000000 到这儿就蒙了 不知道怎么算下去了 ljy5011 发表于 2021-3-29 09:01
内存对齐 就是16个字节 x86不是小端存储么在小端字节序下,把2传给test.a 就是0010 占4个比特位
然后t ...
你要算啥,我看你的意思是把test强转成short然后打印出来?
我电脑是大端,你看完大端 小端应该差不多
我vs2019的运行结果
第一次赋值,可以看见上面内存中 test所占的2个字节
数据变为 02 00
第二次赋值, 数据变为 32 00
第三次赋值, 数据没有变化
你赋值的数过小,看不出细节
这里对每个变量赋值最大的数
第一次赋值数据变为 0f 00
第二次赋值 注意!!
数据变为 ff 01
第三次赋值 ff ff
yuxijian2020 发表于 2021-3-29 10:06
你要算啥,我看你的意思是把test强转成short然后打印出来?
我电脑是大端,你看完大端 小端应该差不多 ...
ok 懂了谢谢好大哥
页:
[1]