代码如下:#includestructbit{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请教一下,为什么是这样呢?
2 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
这个问题其实没什么意义,按照CProgrammingLanguage的说法:Fieldsareassignedlefttorightonsomemachinesandrighttoleftonothers.Thismeansthatalthoughfieldsareusefulformaintaininginternally-defineddatastructures,thequestionofwhichendcomesfirsthastobecarefullyconsideredwhenpickingapartexternally-defineddata;programsthatdependonsuchthingsarenotportable.对于楼主的问题,a,b,c那个字段在前面是和具体的实现相关的.
函数式编程
TA贡献1807条经验 获得超9个赞
内存排列的低位、高位问题。人类表示数字的时候,低位在最右边:0x99=(高)10011001(低)计算机中表示数字的时候,低位在最前面:struct{(低)inta;intb;intc;(高)}低位跟低位对应,高位跟高位对应。
添加回答
举报
0/150
提交
取消