为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2019-04-09 20:24:56
代码如下:#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的说法:
Fieldsareassignedlefttorightonsomemachinesandrighttoleft
onothers.Thismeansthatalthoughfieldsareusefulformaintaining
internally-defineddatastructures,thequestionofwhichendcomes
firsthastobecarefullyconsideredwhenpickingapart
externally-defineddata;programsthatdependonsuchthingsarenot
portable.
对于楼主的问题,a,b,c那个字段在前面是和具体的实现相关的.
                            
查看完整回答
反对 回复 2019-04-09
?
函数式编程

TA贡献1807条经验 获得超9个赞

内存排列的低位、高位问题。
人类表示数字的时候,低位在最右边:0x99=(高)10011001(低)
计算机中表示数字的时候,低位在最前面:struct{(低)inta;intb;intc;(高)}
低位跟低位对应,高位跟高位对应。
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 358 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信