请教一道关于c语言结构体的题目

代码如下:
#include
structbit{
inta:3;
intb:2;
intc:3;
};
intmain(intargc,char*argv[])
{
structbits;
char*c=(char*)&s;
*c=0x99;
printf("s.a:%d;s.b:%d;s.c:%d\n",s.a,s.b,s.c);
return0;
}
0x99的二进制编码是10011001,
我认为的结果是这样:
按照structbit各域的位数,s.a占3位,应该是100,s.b占两位,是11,s.c占3位,是001.
但答案中s.a是001,s.b是11,s.c是100,和我想的顺序相反。
输出结果也和答案一致:
s.a:1;s.b:-1;s.c:-4
请教一下,为什么是这样呢?
慕哥9229398
浏览 359回答 2
2回答

白猪掌柜的

这个问题其实没什么意义,按照CProgrammingLanguage的说法:Fieldsareassignedlefttorightonsomemachinesandrighttoleftonothers.Thismeansthatalthoughfieldsareusefulformaintaininginternally-defineddatastructures,thequestionofwhichendcomesfirsthastobecarefullyconsideredwhenpickingapartexternally-defineddata;programsthatdependonsuchthingsarenotportable.对于楼主的问题,a,b,c那个字段在前面是和具体的实现相关的.

函数式编程

内存排列的低位、高位问题。人类表示数字的时候,低位在最右边:0x99=(高)10011001(低)计算机中表示数字的时候,低位在最前面:struct{(低)inta;intb;intc;(高)}低位跟低位对应,高位跟高位对应。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript