对C语言中赋值运算符的理解

来源:互联网 发布:淘宝评论不见了 编辑:程序博客网 时间:2024/05/02 00:20

以前觉得赋值运算符很简单,但是遇到问题以后才知道自己的理解有些简单。如下所示:

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

所以赋值只是把“=”左边的表达式的值(一定要注意类型),而不是对象,赋给左边的对象,使其的值发生变化。


0 0