文章目录
C语言中的运算符
-
表达式: 由单个或多个操作数、运算符组成的符合C语言规则的式子
-
左值:左值是一种状态,表示一块内存是否可以进行写入操作(赋值),如果一块内存允许被赋值,称为这块内存位左值。 允许出现在赋值号左侧的,称之为左值
-
右值:右值是一种状态,表示一块内存是否可以进行读取操作(读值),如果一块内存允许被读取,称为这块内存位右值。 允许出现在赋值号右侧的,称之为右值
-
学习运算符的时候,学习什么?
- 运算规则
- 操作数个数
- 运算符的结合性
- 优先级
算数运算符
- +,-,*,/,%,++,–
- +,表示加法,二元运算符,从左到右
- -,表示减法,二元运算符,从左到右
- *,表示乘法,二元运算符,从左到右
- /,表示除法,二元运算符,从左到右
- %, 表示取余,二元运算符,从左到右
- ++,自增运算符,一元运算符 (实际操作中不允许在一个表达式中对一个变量进行多次自增、自减操作)(其中的操作数要能被修改)
- 同样还有自减运算符
C语言中,两个整数进行算术运算,结果为整型(结果会自动取整)
一个整数与一个浮点数进行(+、-、*、/)运算,结果为浮点数
C语言的取整规则:向0取整
自增运算符
1.前自增运算符(前++)
- 例如: ++操作数
- 先对操作数进行加1操作,再去去操作数的值
2.后自增运算符(后++)
- 例如 操作数++
- 先取操作数的值,,本行语句执行完成之后在加1
自减运算符
- 与自增运算符操作相同
赋值运算符
- 语法形式 : 操作数1 = 操作数2
- 把操作数2的值赋值给操作数1
- 操作数1必须是左值
复合赋值运算符
- 算数复合赋值运算符 += 、-= 、*= 、 /= 、%=
- 例如 += :二元运算符,从右到左
int a = 10; a += 10;
//在变量a上加10在赋值给a
- 位运算复合赋值运算符:&= |= ~= <<= >>=
- 运算规则同算数复合赋值运算符
关系运算符(二元运算符、从左到右)
- 包括 > , < , >= , <= , == , !=
- 要注意的是:
- 在运算时: 0:表示假 非0表示真
- 在结果中: 0:表示假 1表示真
逻辑运算符
- 逻辑与 :&&
- 真 && 真 => 真
- 真 && 假 => 假
- 假 && 真 => 假
- 假 && 假 => 假
逻辑与的短路问题;当左操作数结果为假时,该操作的结果肯定是假,所以为了减少运算右操作数不执行
- 逻辑或 : ||
- 真 || 真 => 真
- 真 || 假 => 真
- 假 || 真 => 真
- 假 || 假 => 假
逻辑或的短路问题:当左操作数结果为真时,该数的结果肯定是假,所以为了减少运算右操作数不执行
- 逻辑非 : !
- !真 => 假
- !假 => 真
条件运算符
- [操作数1] ? [操作数2] : [操作数3]
判断[操作数1]的结果,如果结果为真时,执行[操作数2],并把[操作数2]的结果作为整个的结果;如果结果为假时,执行[操作数3],并把[操作数3]的结果作为整个的结果
#include <stdio.h>
int main(void)
{
int a;
scanf("%d", &a);
a >= 0 && a <= 100 ? printf("合法\n") : printf("不合法\n");
printf("%s\n", a>=0&&a<=100 ? "合法" : "不合法");
printf(a>=0&&a<=100 ? "合法\n" : "不合法\n");
return 0;
}
位运算符
对内存中每一位进行操作的运算符
- 位与(&):两个操作数,按位进行与运算
- 3 & 4 => 0011 & 0100 => 0000 => 0
- 位或(|):两个操作数,按位进行或运算
- 位非(~):对操作数按位进行非运算 0->1 1->0
- 位异或(^):对操作数按位进行异或运算
- 0 异或 0 => 0
- 1 异或 0 => 1
- 0 异或 1 => 1
- 1 异或 1 => 0
一个数位异或另一个数两遍,则该数不变
- 左移(<<):将 [操作数1] 整体往左移动 [操作数2] 位,所有位整体左移,低位补0,如果是有符号数,符号位会被数据位填充
- 操作数1 << 操作数2
- 对于正整数,相当于[操作数]乘以2的[操作数2]次方
- 对于负整数,C语言没有给出定义,结果是未定义的
- 右移(>>):将 [操作数1] 整体往右移动 [操作数2] 位
- 对于正整数,相当于 [操作数1] 整除2的 [操作数2] 次方
- 对于负整数,C语言没有给出定义,结果是未定义的
- 大部分编译器,对于负数右移运算,符号位补1,来实现负整数整除2的效果
逗号运算符 ,
- 优先级最低的运算符,二元运算符,从左到右
- 操作数1,操作数2
- 先执行操作数1,再执行操作数2,然后把操作数2作为整个表达式的结果