以前觉得赋值运算符很简单,但是遇到问题以后才知道自己的理解有些简单。如下所示:
unsigned int a = 6;
int b = -20;
a + b 的值为多少?
这里涉及的内容包括算术转换和整型提升。
a = 6; 6作为一个常数,它的类型是int,因为与左值的类型不同,所以需要进行转换,a的值为6,类型为unsinged;
b = -20; 不需要特殊变化,b的值为-20,类型为int;
a + b; 因为“+”两边的类型不同,需要进行算术转换,因为unsinged表示的范围比int大,所以b需要转化成unsinged类型,b在32位系统中内存形式为:1111 1111 1111 1111 1111 1111 1110 1100,按照unsinged进行解析,将是一个非常大的数字 4294967276,所以a + b = 4294967282
所以赋值只是把“=”左边的表达式的值(一定要注意类型),而不是对象,赋给左边的对象,使其的值发生变化。