1.算术运算符
运算符 | 功能说明 | 举例 |
---|---|---|
+ | 加法,一目取正 | a+b |
- | 减法,一目取负 | a-b |
* | 乘法 | a*b |
/ | 除法 | a/b |
% | 取模(求余) | a%b |
++ | 自加1 | a++, ++b |
– | 自减1 | a–, --b |
demo:
// 产生一个随机数,并将此数控制在5的范围内
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char const *argv[])
{
// 产生随机因子
srand(time(NULL));
// 产生随机数,控制在15以内
int ret = rand() % 15;
printf("%d\n",ret);
return 0;
}
注意:减号也是负号
1)单目运算符
2)双目运算符
目 :目标操作数
两个单目运算不能进行双目运算
2.关系运算符(重点)
运算符 | 功能 | 举例 | 说明 |
---|---|---|---|
> | 大于 | a > b | 判断a是否大于b |
>= | 大于或等于 | a >= 5 | 判断a是否大于或等于5 |
< | 小于 | 3 < x | 判断3是否小于x |
<= | 小于或等于 | x <= (y+1) | 判断x是否小于或等于y+1 |
== | 等于 | (x+1) == 0 | 判断x+1是否等于0 |
!= | 不等于 | c != '\0' | 判断c是否不等于’\0’ |
注意关系运算符的值为布尔值 也就是说要么关系成立(1) 要么不成立(0)
demo:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a = 10, b = 5;
printf("%d\n",a > b);// 10大于5,为真结果为1
printf("%d\n",a >= b);// 10大于或者等于5,为真,结果为1
printf("%d\n",a < b);// 10小于5,为假,结果0
printf("%d\n",a <= b);// 10小于5或者等于5,为假,结果0
printf("%d\n",a == b);// 10等于5,为假,结果0
printf("%d\n",a != b);// 10不等于5,为真,结果1
return 0;
}
3.逻辑运算符
运算符 | 功能说明 | 举例 |
---|---|---|
! | 逻辑反 | !(x==0) |
&& | 逻辑与 | x > 0 && x < 10 |
|| | 逻辑或 | y < 10 || x > 10 |
逻辑与 && ---而且,同时 两个操作数都必须为真,结果为真
逻辑或 || ---或者 只要有一个为真,那么结果为真
逻辑非 ! ----反
非0 为真,0 为假
逻辑表达式结果有两种 1为真 0为假
特殊规则:
在逻辑与运算中,如果左边表达式的值为假,那么右边表达式将不被执行。
在逻辑或运算中,如果左边表达式的值为真,那么右边表达式将不被执行。
// c语言为惰性语言,只要表达式1能确定整条语句结果,则表达式2不执行
4.位运算符
运算符 | 名称 | 举例 | 功能说明 |
---|---|---|---|
~ | 位逻辑反 | ~a | 将变量 a 中的每一位取反 |
& | 位逻辑与 | a & b | 将变量 a 和 b 逐位进行与操作 |
| | 位逻辑或 | a | b | 将变量 a 和 b 逐位进行或操作 |
^ | 位逻辑异或 | a ^ b | 将变量 a 和 b 逐位进行异或操作 |
<< | 左移 | a << 4 | 将变量 a 中的每一位向左移动4位 |
>> | 右移 | x >> n | 将变量 x 中的每一位向右移动4位 |
假设有一个无符号32位整型数据
unsigned int data=0x12ff0045
请编写一个程序用位运算把data的第14、15位修改1,把22、23位修改为0, 并且输出修改后的数据。
#include <stdio.h>
int main()
{
unsigned int data = 0x12ff0045;
// 将第14,15位置为1
printf("%x\n",data | 0x03 << 14);
// 将22,23位修改为0
printf("%x\n",data & ~(0x03 << 22));
return 0;
}
5.特殊运算符
1)赋值运算符
// 连续赋值
a = b = 50; // 先将 50 赋给 b,再将 b 的值赋给 a,正确
2)复合赋值符
/ 加减乘除:
a += n; // 等价于 a = a+n;
a -= n; // 等价于 a = a-n;
a *= n; // 等价于 a = a*n;
a /= n; // 等价于 a = a/n;
// 求余:
a %= n; // 等价于 a = a%n;
// 位运算:
a &= n; // 等价于 a = a&n;
a |= n; // 等价于 a = a|n;
a ^= n; // 等价于 a = a^n;
a >>= n; // 等价于 a = a>>n;
a <<= n; // 等价于 a = a<<n;
6.条件运算符(三目运算符,重点)
-
语法:表达式1?表达式2:表达式3
-
释义:当表达式1为真时,去表达式2,否则取表达式3
int a = 200;
int b = 100;
int m = (a>b) ? a : b; // 如果 a>b 为真,则 m 取 a 的值,否则取 b 的值
7.sizeof运算符
8.return运算符
9.逗号表达式
// 逗号运算符的特点是取最后一个表达式作为结果
表达式1,表达式2,表达式3,... 表达式n)
求值顺序:
先求表达式1,再求表达式2,再求表达式3,最后求表达式n
整个逗号表达式的值为n的值
注意:
1.都好表达式的优先级最低
2.运算顺序是从左往右
3.整个都好表达式的值取决于最右边的表达式的值
10.优先级与结合性