C语言学习笔记之(运算符和表达式篇)

一、基本运算符

基本算术运算符包括两个单目运算符(正和负),5个双目运算符(加、减、乘、除和模运算)。具体符号及其对应的功能举例如表所示。

运算符功能举例结果
+正号运算(单目运算符)+aa的值
-负号运算(单目运算符)-aa的负数
+加法运算a+ba和b的和
-减法运算a-ba和b的差
*乘法运算a*ba和b的积
/除法运算a/ba除以b的商
%模运算(求余运算)a%ba除以b的余数

二、自增自减运算符(重要)

自增运算符++及自减运算符--的作用是让变量的值加1或减1。但自增自减运算符都有前置与后置之分,前置后置决定了变量使用与计算(加1或减1)的顺序:

自增运算符前置,如++i,是先将i的值加1,再使用加1后i的值。

自增运算符后置,如i++,是先使用i当前的值,再将i的值加1。

自减运算符前置,如--i,是先将i的值减1,再使用减1后i的值。

自减运算符后置,如i--,是先使用i当前的值,再将i的值减1。

例子:比较自增、自减运算符前置与后置的不同。

#include <stdio.h>
int main()
{
	int a,b,c,d;				/*定义a,b,c,d四个整型变量*/
	a=10;					/*a赋值为10*/
	b=10;					/*b赋值为10*/
	c=a++;					/*自增运算符后置,先将a的值赋给c,a再自加1*/
	d=--b;					/*自减运算符前置,b先自减1,再将值赋给d*/
	printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);		             /*输出a,b,c,d的值*/
	return 0;						             /*函数返回值0*/
}

#运算结果如下:
a=11,b=9,c=10,d=9

实际上,程序中c=a++,可看作两步:先是计算c=a,所以c等于10;后计算a=a+1,所以a等于11。程序中的d=--b,亦可等价于先计算b=b-1,后计算d=b,所以b等于9,d也等于9。因此下面程序与例3-6的程序功能是等价的。

把上段代码用传统运算符方式表达

#include <stdio.h>
int main()
{
	int a,b,c,d;					/*定义a,b,c,d四个整型变量*/
	a=10;						/*a赋值为10*/
	b=10;						/*b赋值为10*/
	c=a;						/*将a的值赋给c*/
	a=a+1;						/*a+1后的值赋给a*/
	b=b-1;						/*b-1后的值赋给b*/
	d=b;						/*b的值赋给d*/
	printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);		/*输出a,b,c,d的值*/
	return 0;						/*函数返回值0*/
}

#运算结果如下:
a=11,b=9,c=10,d=9

三、简单赋值

赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如a=1就是将1的值赋给变量a。由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。它的一般形式为:变量=表达式赋值表达式的作用是将一个表达式的值赋给一个变量,因此,赋值表达式具有计算和赋值两个功能。例如,“a=4+5”是一个赋值表达式,其求解过程是先求赋值运算符右侧的表达式“4+5”的值(9),然后再将9赋给赋值表达式左侧的变量a。在赋值表达式后加上分号就构成了赋值语句。例如:a=b=c=0;这条语句是正确的,这是因为既然赋值是运算符,那么多个赋值就可以串联在一起。运算符“=”是右结合的,即“自右向左”进行运算,所以上述赋值表达式等价于:a=(b=(c=0));作用是先把0赋给c,再赋给b,最后赋给a。

为变量赋初值时,如果要对几个变量赋予同一个初值,可以采用如下格式:
int a,b,c;
a=b=c=0;
也可以写成:
int a=0,b=0,c=0;
但是不能写成:
int a=b=c=0;

未完待续......