首页 > 代码库 > 算术运算符和表达式

算术运算符和表达式

C语言的运算符范围很宽,除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理,下图是C运算符的分类

1  算术表达式

用算术运算符和括号将运算对象(也称操作数)连接起来的,符合语法规则的式子成为算术表达式。运算对象包括 常量 变量 函数。

C语言规定了各种运算符的结合方向,这是C语言特点之一,是别的高级语言所没有的。算术运算符的结合方向为“自左至右”又称为“左结合性”,以后还可以看到有些运算符的结合方向为“自右至左”即“右结合性”。

2 强制类型转换

(类型名)(表达式)

( double ) a    将a转换成double类型


3 自增自减运算符

作用是使变量的值增加或者减少1

++i   --i 先加/减再使用

i++   i-- 先使用再加/减

 4 有关表达式使用问题(不同的编译系统不一样)

C并没有具体的规定表达式的字表达式的顺序 允许编译系统自己安排 例如 a=f1()+f2(); 并不是所有的编译系统都是先调用f1函数再调用函数f2,又例如 i=3;(i++)+(i++)+(i++)有的编译系统求的结果是12有的编译系统求的结果是9。 还比如i=3;printf("%d,%d",i,i++);在有的系统中是按照从左至右求值,输出3,3.而多数编译系统中是按照自右而左输出4,3,所以不提倡printf("%d,%d",i,i++),提倡printf("%d,%d",j,i++)这种写法。


5 算术运算符

1.1  " + " 加法运算

1.2  " - "减法运算

1.3  " * "乘法运算

1.4  " / " 除法运算(不同的编译系统不一样)。这里需要说明的是如果除数或者被除数有一个为负数舍入的方向是不固定的,跟编译系统有关,大多数系统是"向零靠拢"。例如:-5%3 有的系统结果为-1,有的结果为-2.,多数系统是-1.更接近零。

1.5  " % "模运算,或求余运算,%两边均应为整数。


6  赋值运算符和赋值表达式

6.1赋值表达式

< 变量 >< 赋值运算符 >< 表达式 >

赋值表达式是自右至左的, 赋值运算符左侧的标识符成为左值,右侧的称为右值。并不是任何对象都可以作为左值的,变量可以作为左值,常量和表达式不能作为左值。

例如a=12; a+=a-=a*a;

它的运算顺序如下:

① a-=a*a 相当于a=a-a*a=-132;此刻a的值为-132;

② a+=-132 相当于a=a+(-132)=-264;此刻a的值为-264;


7  逗号运算符和逗号表达式

逗号运算符C语言提供的运算符,用它将两个表达式连接起来,又称为 顺序求职运算符 一般形式为 :  表达式1,表达式2 。逗号表达式的求解过程是 先求表达式1,再求表达式2,整个逗号表达式的结果是表达式2的值。

例如 (a=3*5,a*4),a+5

先计算出a=15,再计算出60(a的值仍然是15),再计算出20,最后整个逗号表达式的结果是20.


别的运算符待续......