c语言里 int a=2; double b=3+2.1; a= a+++b; printf("a=%d,b=%d\n", a,b); 结果是什么?为什么?

如题所述

a=8,b=1717986918

a=8是因为根据c的运算符优先级原则:
a+++b详单与执行a+b;a++ a=a+++b等于a=a+b;a++

b=1717986918是因为C/C++编译器都是按照IEEE(国际电子电器工程师协会)制定的IEEE 浮点数表示法来进行运算的。这种结构是一种科学表示法,用符号(正或负)、指数和尾数来表示,底数被确定为2,也就是说是把一个浮点数表示为尾数乘以2的指数次方再加上符号。
所以5.1的浮点数存储相当于整数1717986918的存储
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-15
一、结果是:
a=8,b=1717986918
二、原因:
a=a+++b;//等价于a=(a++)+b;a结果为8。
printf("a=%d,b=%d\n", a,b); //b的值为5.100000,按整数输出即是1717986918。这个与浮点数表示形式有关,转换很复杂。
第2个回答  2011-03-15
a+++b等于a+b;a++
所以a=a+++b等于a=a+b;a++
第3个回答  2011-03-15
结果是:a=8,b=6
a.b的输出格式是十进制整数,对a的运算是一个附值表达式,考虑到运算顺序和优先级,a=a+(++b).其他的就不难理解了,相信你能看懂!记得和我交流啊…
第4个回答  2011-03-15
a=7,b=5
打印出整形数据
第5个回答  2011-03-15
a=8,b=1717986918
Press any key to continue
如果你的b是以浮点型形式(b=%f)输出的话,就会输出正确答案
a=8,b=5.1000
Press any key to continue
而因为++的优先级高于+,且运算是从左至右的,所以a=a+++b的运算是a先自加1,然后再与b相加,因为a是整型数据,所以运算结果再强制转换为整型,四舍五入得8。
相似回答