左值和右值有关问题

左值和右值问题
不明白a==8;和8==a的区别?

------解决方案--------------------
把常数写在前面是防止写判断“==”时写成了“=”,那么前者不报错,后者报错。所以这是一个写程序的好习惯。
------解决方案--------------------
正确写法情况下是没有区别的。
但是a==8;和8==a,如果写错,比如写成,a=8,8=a,
a=8这成这样,编译不会报错,
8=a写成这样,编译期间会报错,所以习惯上,我们一般会写成8==a,防止不小心少写了一个=号,这样编译器也会报错,从实际感受来说,当写代码时,确实容易这样犯错。
------解决方案--------------------
     楼上要表达的应该是赋值语句“=”吧,左值必须是变量,如a = 8,是将8赋值给a,a必须能够储存8这个值,所以a必须是变量。而8 = a 是不行的。如果是关系表达式“==”的话,只是判断两者之间的关系,8 == a与 a == 8都是可以的。
------解决方案--------------------
两者是等价的,只能说,这是一个良好编程习惯.
------解决方案--------------------
引用:
那这个#include<stdio.h>
main()
{
int a;
scanf("%d",&a);
                if(a=0xA
------解决方案--------------------
a>12)
          if(011&10==a)printf("%d",a);
          else printf("r %d",a);
                else
                printf("wrong");
}为甚么a输入0x14和输入20结果不同?

因为%d 不能正确处理十六进制的输入 
你应该用scanf("%i", &a);

------解决方案--------------------
这个和左值,右值没有关系的吧!

只是一个判断符号的哦!
至于真正的左值,右值问题,推荐个supermageboy的博客去看看
http://blog.csdn.net/code_crash/article/details/7038343