请问各位大神这个代码怎么理解?

#include
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (a == --a)
printf("TRUE 2\t");
}

这代码的结果不确定,这属于c语言的未定义行为。未定义行为是指,代码存在2种以上的理解方式,没有规定这种写法的确切含义是什么,所以不同编译器不同。

http://blog.csdn.net/qq_29169813/article/details/51416281

代码输出应该是TRUE 1,要分清后置自减和前置自减
a == a-- 是先比较,然后a--
a == --a 是先--a,后比较

图片说明

#include <ios>
using namespace std;
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (9 == --a)
printf("TRUE 2\t");
a = 10;
if(a-- == 10)
printf("TRUE 3\t");
a = 10;
if(--a == 10)
printf("TRUE 4\t");
}

运行结果是 “TRUE2   TURE3”
我觉得它是先计算右边式子的值然后在计算左边式子的值 那么
在判断 (a == a--)的时候先计算了右边的式子 a = 10 ,然后a自减 , 判断 9 == 10 
在判断( a == --a )的时候也是先计算右边的式子,但是是先a自减,a == 9 ==> 9 == 9 输出true