图片内容转自菜鸟教程
http://www.runoob.com/cprogramming/c-operators.html
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
杂项运算符
一、算术运算符
(一)基本算术运算符
加法运算符”+“:为双目运算符【如++为单目】,具有右结合性。
减法运算符“-”:双目运算符,亦可作负值运算符,此时为单目运算,具有左结合性。
乘法运算符“*”:双目运算,具有左结合性。
除法运算符“/”:双目运算,左结合性。【参与运算量均为整型时,结果也为整型,舍去小数;如果运算量中有一个是实型,则结果为双精度实型】
ex.
#include<stdio.h>
void main()
{
printf("%f\n",3.0/4)
}
//结果为:0.750000
(二)运算的优先级
C语言中运算符的运算优先级共分为15级。1级最高,15级最低。表达式中优先级高的先进行运算;优先级相同时按运算符的结合性所规定的方向处理。
2.运算符的结合性:
C语言中运算符的结合性有:
左结合性(自左向右)
【表达式x-y+2:y先与“-”结合,执行x-y运算,再执行"+2"的运算】
右结合性
【表达式x=y=2:先执行y=2再执行x=(y=2)】
博客园,口诀具体描述
ex.
#include <stdio.h>
main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d;
printf("(a + b) * c / d 的值是 %d\n", e );
// ( 30 * 15 ) / 5,值为90
e = ((a + b) * c) / d;
printf("((a + b) * c) / d 的值是 %d\n" , e );
// ( 30 * 15 ) / 5,值为90
e = (a + b) * (c / d);
printf("(a + b) * (c / d) 的值是 %d\n", e );
// (30) * (15/5),值为90
e = a + (b * c) / d;
printf("a + (b * c) / d 的值是 %d\n" , e );
// 20 + (150/5),值为50
return 0;
}
note.
自增、自减运算符
自增1、自减1运算符均为单目运算,都具有右结合性。
++:自增1
--:自减1
其他形式:
++i 自增1后再参与运算
--i
i++参与运算后再自增1
i--
ex.
#include<stdio.h>
void main()
{
int i=8;
printf("%d\n",++i);
printf("%d\n",--i);
}
/*将输出:
i=9
i=8*/
二、关系运算符
三、逻辑运算符
四、位运算符
五、赋值运算符和赋值表达式
1.变量=表达式
2.功能时计算表达式的值再赋予左边的变量。具有右结合性。
如:a=b=c=5可理解为a=(b=(c=5))
3.类型转换
如果赋值运算符两边的数据类型不同,系统将自动进行类型转换,即把赋值号右边的类型转换为左边的类型。具体规定如下:
(1)实型赋予整型,舍去小数部分。
(2)整型赋予实型,数值不变,但将以浮点形式存放,即用0填充小数部分。
(3)字符型赋予整型,由于字符型为一个字节,而整型为四个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。而整型赋予字符型,只把低八位赋予字符量。
4.复合的赋值运算符
+= -= *= /= %= <<= >>= &= ^=
——有利于编译处理
六、杂项运算符
逗号运算符和逗号表达式
1.功能:把两个表达式连接起来组成一个表达式。
一般形式:表达式1,表达式2
2.求值过程时分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。
ex.
void main()
{
int a=2,b=4,c=6,x,y;
y=(x=a+b,b+c);
printf("y=%d,x=%d",y,x); //输出:y=10,x=6
}
note.
(1)逗号表达式一般形式中的表达式1和表达式2也可以又是逗号表达式,如:
表达式1,(表达式2,表达式3);
形成了嵌套情形,因此可以把逗号表达式扩展为以下形式:
表达式1,表达式2,…表达式n;
整个逗号表达式的值等于表达式n的值。
(2)程序中使用逗号表达式,通常时要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。
并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是作为各变量之间的间隔符。