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

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值