c 语言高手进 a=5; b=++a * - -a ; b=25; 解释下

来源:百度知道 编辑:UC知道 时间:2024/06/18 18:21:07

运算过程如下:
++、--的运算优先级高于*。++、--是同级运算,从右往左。

先算--a; 此时a的值为4.

再算++a; 此时a的值为5.

然后再算 a*a; 结果自然是25.

记住,成号*两边的运算数都是变量a。不是说是具体的某个数。

a=5; //把a赋值为5
b=++a*--a; //先把a=a加1乘上a=a-1后赋给b
b=25; //b赋值为25

这个程序,在不同的编译器下,运算逻辑和结果是不一样的。
相同的是运算符的优先级和结合性,比如说++,--是同一优先级,从右至左结合。*的优先级比它们低。但是对于++和--的处理方法不一样。
在TC中,++ 和 -- 被当作普通的运算符,一边运算一边改变值。在这道题里 a 的初值是5,在执行 b=++a * - -a ; 时,从右开始计算,--a 结果是4,同时 a 的值也变成 4,++a 的结果是5,同时 a 又变成 5,最终结果是 20。
但是在VC里,前置的++和-- 是在运算之前预处理(后置的后处理),在计算整个表达式之前,先计算 --a 和 ++a,这时 a 的值还是5,预处理后语句已经变成了 b=a*a; 此时结果是25。
VC的这种运算逻辑比较高级,现在较新的编译系统都采用这一套方式,例如微软的VS,还有基于 GCC 的 Dev C++,Code::Blocks 等都是这样的。