2.2赋值运算符(让我了解了赋值运算与复合运算,其中只有算术表达式的是右结合)

在这里插入图片描述如何来定义一个变量?
定义一个变量就是要生命变量的名字和类型,例如我们要定义两个整型变量a与b。
int a b ;
那么在这条语句中,首先我们要给出整型的类型关键字,然后在给出这两个变量的名字a与b.
在变量定义的语句中,声明了变量的类型,它决定了变量占用空间的大小,
编译器要做的事情就是根据变量定义语句中声明的变量的类型,来为变量分配相应字节数的存储空间 ,那么不同类型的变量,除了占用内存空间的大小不同之外,他们在内存中的存储形式,表数范围以及可参与的运算种类也是不同的,
变量的名字就是标识内存中的一个具体的存储单元,
有了变量的名字,我们就可以找到它标识的存储单元
进而,我们可以通过变量的名词,来访问,它说标识 的存储单元了
在这里插入图片描述

变量定义语句只是告诉编译器为变量分配相应大小的存储单元,但是这个存储单元的值究竟是多少呢?如果我们没有为变量进行初始化的话,那么这个变量的值,对于我们用户来说,就是未知的,不确定的,那么如何来为这个变量赋值呢?C语言并没有提供专门的赋值语句,为变量赋值,需要通过赋值操作来实现,而赋值操作就需要用到赋值运算符

在这里插入图片描述赋值运算符与数学中的等号,看上去是非常类似,但是它和数学中的等号是截然不同的
数学中a=3,表示a的值是和3是相等的
但是在c语言中,表示的是赋值操作,而赋值操作是有方向性的,也就是这个赋值运算,表达,将3的值赋值给a
a=3
a←3
C语言中,要求右值和左值的类型应该是一致的。
如果我们定义的变量a是整型的,那么就应该用整型的a,来进行赋值;
如果我们用了一个非整型的值,给a进行赋值的话,比如说我们用了一个浮点类型的数
int a
a=3.9
用3.9给进行赋值,那么最后a得到的值,其实就是3.9的整数部分,它的小数部分信息就会丢失了 。
在这里插入图片描述
由赋值运算符构成的这个表达式,我们就称它为赋值表达式;赋值运算符要求左侧是一个变量,赋值运算符的右值,可以是一个表达式;
例如我们可以将3+9的值赋值个a,
但是在这个表达式中出现了2个算术符,一个是赋值运算符,另一个是算术运算符,
而算术运算符与赋值运算符,它的优先级是不同的;
在优先级不同的情况下,我们应该执行,优先级高的运算,c语言规定,算术运算符的优先级高于赋值运算符,因此这个表达式,先执行算术运算3+9,然后将3+9的值赋值给a;
向这样一种赋值方式,我们就称它为,简单的赋值;

多重赋值,例如我们要连续给两个变量赋值,为3,那么这就是一个多重赋值,在这个表达式中,出现了 2个运算符,但是这两个运算符都是赋值运算,它的优先级是相同的,子优先级相同的情况下,我们应该考虑它的结合性,赋值运算符它的结合性是右结合的,对于这样的赋值表达式,我们就应该先执行右边的赋值运算符,然后在执行左边的赋值运算符。或者说,就是先执行,将3的值,赋值给b的值操作,然后在讲b=3这个复制表达式的值,在赋值给a.就相当于把3赋值给a。这就是一个多重赋值的赋值表达式。
这样来看,这个a=a+1赋值表达式的含义是什么呢?
如果从数学的角度来看,这个表大会就是错苏我,因为无论a取任何值,这个表达式都是不成立的,但是c语言中,是成立的
a+在这里插入图片描述1之后的值,在赋值给a。
换句话说,赋值运算符,右侧的a,对它进行的是一个读操作,对赋值左侧的运算符的变量a,执行的是一个写操作
也就是先读出的a的值,将a的值加一,之后,在从新写回到变量a中;
那么这样的话,在赋值运算符两侧a的值就是不同的。
赋值运算符在右侧的变量a是在加一之前的变量a的值
赋值运算符在左侧的变量a是在执行加一之后的这个a的值

在这里插入图片描述

对于a=a+1的操作简写a+=1的形式;
换句话说,就是a+=1相当于执行了a=a+1的操作
那么这个+= 就是一个复合的运算符
与算术运算符合的算术运算符,可以有五种。
除了+= 、 -= 、*= 、/= 、%=
例如a-=3
我们可以把它等价为,a=a-3 相当于把减号移动到赋值运算符的右侧,然后左侧仍然保留是a=

C语言中的赋值操作,但是C语言,没有提供专门的赋值语句,那么在程序中,如何用语句的形式来给变量赋值呢?第一种,通过赋值表达式语句。
这是一个赋值表达式。 变量=表达式
添加分号,构成赋值表达式语句 变量=表达式 ;
例如前面a=3 这是一个赋值表达式
a=3;叫赋值表达式语句
第二种方式,可以在定义变量的同时,同时为变量进行初始化。
类型 变量=表达式;
int a = 3;
这样一条语句 int a;
a = 3;
a=b=3;
int a = b = 3 ; 错误
int a=3, b=3; 正确的
也就是在定义变量的时候,不可以定义a的值等于b的值。但是我们可以定义变量的时候,可以分别定义初始化。
在这里插入图片描述
假设我们定义了整型变量a,并且初始化为3,那么在执行这样的一条赋值操作之后呢?
a+=a-=a*a
变量a的值是多少额?
在这合理,我们看到一共有3个运算符
前两个是复合运算符,第三个是算术运算符。
由于算术运算符高于赋值运算符,因此,先执行算术运算。
先执行3×3
因此a+=a-=9
有两个复合的赋值运算符,而赋值运算符的优先级是右结合;也就是,从右向左进行计算,就相当于执行a+=(a-=9)
(a-=9) a=a-9
那么这里头注意,这里又出现了2个运算符,一个是算术运算符一个是赋值,同理执行算术运算,也就是先执行,3-9这个运算
a=a-9=3-9=-6
接下来把-6的值赋值给a,此时a的值不在是3了,而变成了-6
那么在接下来执行前一个赋值运算,就是相当于执行a+=-6,
a=a±6 因为a的值已经是-6,因此这个计算相当于两个负六来进行相加,因此等于负12,
所以变量a的值,就是负12;
在这里插入图片描述

下图表达式有三个复合运算符
而赋值运算符的优先级是右结合的,因此,这个运算,我们首先执行
a*=a的操作
a=a * a =3*3=9 9赋值给a
a-=9 a =9-a =9-9=0 0赋值给a
a+=0 a=a+0=0+0=0
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值