目录
运算符主要包括:算数运算符,关系运算符,逻辑运算符,位运算符,赋值运算符,条件运算符,逗号运算符,指针运算符,强制类型转换运算符,下标运算以及其他运算符。
1.算数运算符
算数运算符包括:正号运算符(+),负号运算符(-),乘法运算符(*) ,除法运算符(/),
求余运算符(%),加法运算符(+),减法运算符(-),自增运算符(++i,i++),自减运算符(--i,i--)。
注:1.%运算符要求参加的运算对象(即操作数)为整数,结果也为整数。如8%3,结果为2。
2.除%以外的操作数都可以是任何算数类型。
3.++i,--i,在使用之前,先将i的值加(减)1。
4.i++,i--,在使用之后,使i的值加(减)1。
5.判断i增加还是减少以本条语句后的分号(;)为依据。
2.关系运算符
关系运算符也叫比较运算符 ,常用来比较和判断两个常量或变量的大小。关系运算符对应的是二元运算,运算结果常用为boolean型。
关系运算符的值为false或true对应着数字中的0或1。关系运算符只有成立与不成立的逻辑关系。
C提供的关系运算符有:> , >= , < , <= , !=(不等于) , ==(判断两边是否相等,结果为0或1)
3.逻辑运算符
逻辑运算符有三种:and、or、not(三者都是关键字),也就是与、或、非。
x and y # 当x和y均为True时,此逻辑表达式为True,否则为False
x or y # 当x和y之中至少有1个为True时,表达式结果位True,否则为False
not x # 当x为True时,表达式结果为False;当x为False时,表达式结果为True
注:逻辑运算符常与比较运算符一起使用
4.位运算符
位运算符分为位逻辑运算符和位移运算符 。
位逻辑运算符:
运算符 | 含义 | 举例 | 规则 |
& | 与 | a & b | 任何二进制位和0进行&运算,结果都是0;和1进行&运算结果都是原值 |
| | 或 | a|b | 任何二进制位和0进行|运算,结果都是原值;和1进行|运算结果都是1 |
~ | 取反 | ~a | 0为1,1为0 |
^ | 异或 | a^b | 相同为0,相异为1 |
位移运算符:
运算符 | 含义 | 举例 | 规则 |
<< | 左移位 | a << 2 | 空位补0,被移除的高位丢弃 |
>> | 右移位 | a >> 2 | 被移位的二进制最高位为0,右移后,空缺位补0;最高位为1,空缺位补1 |
>>> | 无符号右移位 | a >>> 2 | 被移位二进制最高位无论是0还是1,空缺位都用0补 |
5.赋值运算符
赋值运算符的优先级低于算术运算符,结合方向是自右向左;它表示即将其右侧的值送到左侧的变量中(左侧只允许是变量,不能是表达式或其他形式);不要将赋值运算符与相等运算符“==”混淆。
运算符 | 含义 | 举例 | 结果 |
+= | 将该运算符左边的数值加上右边的数值, 其结果赋值给左边变量本身 | int a=5; a+=2; | a=7 |
-= | 将该运算符左边的数值减去右边的数值, 其结果赋值给左边变量本身 | int a=5; a-=2; | a=3 |
= | 将该运算符左边的数值乘以右边的数值, 其结果赋值给左边变量本身 | int a=5; a=2; | a=10 |
/= | 将该运算符左边的数值整除右边的数值, 其结果赋值给左边变量本身 | int a=5; a/=2; | a=2 |
%= | 将该运算符左边的数值除以右边的数值后取余,其结果赋值给左边变量本身 | int a=5; a%=2; | a=1 |
6. 条件运算符
为了获得两个数中比较大的数,常使用if语句,例:
if(a>b){
max = a;
}else{
max = b;
}
引入条件运算符后就变得很简单
表达式1 ? 表达式2 : 表达式3
其求值规则为:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。
上面的语句就可以改为
max = (a>b) ? a : b;
注:1.条件运算符是c语言中唯一一个三目运算符
2.条件运算符的优先级低于关系运算符和算术运算符,但高于赋值符
3.条件运算符?和:是一对运算符,不能分开单独使用
4.条件运算符的结合方向是自右至左
7.逗号运算符
c语言中,逗号运算符的优先级最低 ,用它可将两个(或多个)表达式连接起来。
逗号表达式的一般形式为:
表达式1,表达式2;
逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
8.指针运算符
名称 | 符号 | 格式 | 含义 | 用途 |
取地址运算符 | & | &变量名 | 取出存放变量的地址 | 跨函数传递变量值 |
间接运算符 | * | *指针名/地址名 | 取出存储在地址中的对应值 |
9.强制类型转换运算符
当我们想改变一个表达式的类型时,“强制类型转换符”就派上用场了
1.一般形式:
(类型名)(表达式)
2.一般应用:
(int) x --将x转换成int类型
(double)(x+y) --将x+y的值转换成double类型
#include<stdio.h>
int main()
{
int a;
float b;
b = 2.5;
a = (int)b;//将float型转为int型
printf("%d\n", a);//结果为2
return 0;
}
10.下标运算符
1. 定义一个数组:int a[5] = {5,6,7,8,9};
由于数组的名字就是数组的首地址,[ ] 下标运算符里面是偏移量,则 a[0+1]是指数组的首地址向右移动一位,代表指向6这个元素。
前面也讲过 * +空间地址 == 该元素名字,即* &b== b。所以 *a == &a,则 *(a+1)== a[1]== 6。
2.对于指针:
int *p =a; / / 指针指向数组的首元素,即 p == &a。
*(p+4)== p[4] == 4[p]; / / 同数组一样