两个简单的C语言问题

学机械的同学最近搞嵌入式程序,问了我两个C语言的问题
====================================================================================
1.b=*P++,是什么操作?
2.int a;*P1
  float f=2.5, *P2;
  P2=&f
  P1=(int)P2
  a=*P1;
问a等于几?
===================================================================================
第一个问题,我说*运算符比++优先级高,所以应该先取值再加1,不信可以看《C程序设计语言》(第二版)的第五章第二页
实际答案是:*与++优先级一样,运算是从右到左结合,所以是先执行++,然后取值,只不过++是后置运算符,下次才能生效
我,汗了一把!靠记忆不如靠理解
第二个问题,他直接把答案告诉我了,我又汗了一把,明显对我的期望值降低了不少
让我解释
我不懂,内心狂郁闷
先查float的存储原理
(1)2.5的二进制科学计数法是1.01*2^1
(2)然后符号位是0
(3)指数位是(基数)127+1=128,二进制表示是1000 0000
     *因为指数的范围是—127~128,所以设计存储时的指数=元数据+127
(4)尾数是01,也就是010 0000 0000 0000 0000 0000
全部字段表示出来就是
0|1000 0000|010 0000 0000 0000 0000 0000
4byte的存储单元分别是
mem[3]=0x40
mem[2]=0x20
mem[1]=0x00
mem[0]=0x00
a=*P1操作取出的整数值
0100 0000 0010 0000 0000 0000 0000 0000
很大
这两个简单的例子我初学时候根本就没深究过,很是惭愧!现在基本上还是从零开始,前车之鉴啊

你可能感兴趣的:(C++,c,C#,F#,嵌入式)