赋值运算符分为简单赋值运算符和复合赋值运算符。赋值运算符为双目运算符,运算符左边的操作数为被赋值的变量,右边的操作数为值或表达式,值可以为常量、变量或数值常量,表达式为由变量或常量、数值常量与运算符的组合,若右边的操作数为表达式,需先计算表达式,再将表达式的结果赋值给左边操作数所指向的变量。
表1 列出了C语言支持的简单赋值运算符。
表 1 简单赋值运算符
|
运算符 |
描述 |
例子 |
|
= |
简单的赋值运算符,将右边操作数的值赋值给左边操作数指定的变量中 |
a=30 a=b+c |
复合赋值是指先执行运算符指定的运算,然后再将运算结果存储到运算符左边操作数指定的变量中。表2列出了“+=、-=、*=、/=、%=”复合赋值运算符的描述及例子。
表 2 复合赋值运算符
|
运算符 |
描述 |
例子 |
|
+= |
复合赋值运算符,将左边操作数指定变量值与右边操作数的值相加后,再赋值给左边操作数指定变量 |
a+=30 等同于 a=a+30 |
|
-= |
复合赋值运算符,将左边操作数指定变量值与右边操作数的值相减后,再赋值给左边操作数指定变量 |
a-=30 等同于 a=a-30 |
|
*= |
复合赋值运算符,将左边操作数指定变量值与右边操作数的值相乘后,再赋值给左边操作数指定变量 |
a*=30 等同于 a=a*30 |
|
/= |
复合赋值运算符,将左边操作数指定变量与右边操作数的值相除后,再赋值给左边操作数指定变量 |
a/=30 等同于 a=a/30 |
|
%= |
复合赋值运算符,将左边操作数指定变量与右边操作数的值取余后,再赋值给左边操作数指定变量 |
a%=30 等同于 a=a%30 |
复合赋值运算符同简单赋值运算符一样,也是双目运算符,需要两个操作数。不同的是,复合赋值运算符要先执行运算符自身要求的运算后,再将运算后的结果赋值给左边的操作数指定的变量。
复合赋值运算符“+=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行相加操作,然后再将相加的结果赋值给左边的操作数指向的变量。例如下面语句:
int a = 10;
a += 20;
此时,变量a等于30,其过程是变量a先与数值20相加,因为变量a的值是10,因此与数值20相加的结果是30,再将30赋值给变量a,此时变量a的值为30。
复合赋值运算符“-=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行相减操作,然后再将相减的结果赋值给左边的操作数指向的变量。例如下面语句:
int a = 20;
a -= 18;
此时,变量a等于2,其过程是变量a先与数值18相减,因为变量a的值是20,因此与数值18相减的结果是2,再将2赋值给变量a,此时变量a的值为2。
复合赋值运算符“*=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行相乘操作,然后再将相乘的结果赋值给左边的操作数指向的变量。例如下面语句:
int a = 20;
a *= 3;
此时,变量a等于60,其过程是变量a先与数值3相乘,因为变量a的值是20,因此与数值3相减的结果是60,再将60赋值给变量a,此时变量a的值为60。
复合赋值运算符“/=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行相除操作,然后再将相除的结果赋值给左边的操作数指向的变量。例如下面语句:
int a = 15;
a /= 3;
此时,变量a等于5,其过程是变量a先与数值3相除,因为变量a的值是15,因此与数值3相除的结果是5,再将5赋值给变量a,此时变量a的值为5。
复合赋值运算符“%=”,表示的意思是先将运算符左边操作数指向的变量值和右边的操作数执行取余操作,然后再将取余的结果赋值给左边的操作数指向的变量。例如下面语句:
int a = 15;
a %= 8;
此时,变量a等于7,其过程是变量a先与数值8执行取余运算,因为变量a的值是15,因此与数值8取余运算的结果是7,再将7赋值给变量a,此时变量a的值为7。
例【1】赋值运算符练习
程序清单 sample.c
#include <stdio.h>
int main()
{
// 声明变量
int a = 10,b=20,c=20,d=15,e=15;
a += 20;
printf("a += 20:%d\n",a);
b -= 18;
printf("b-=18:%d\n",b);
c *= 3;
printf("c*=3:%d\n",c);
d /= 3;
printf("d/=3:%d\n",d);
e %= 8;
printf("e%=3:%d\n",e);
}