目录
操作符的分类
相邻的操作符之间用 “、”号隔开,并没有“、”这个操作符
- 算术操作符:+ 、- 、* 、/ 、%
- 移位操作符:<< 、 >>
- 位操作符:& 、| 、^ 、~
- 赋值操作符:= 、+= 、-= 、*= 、/= 、%= 、<<= 、>>= 、&= 、|= 、^=
- 单目操作符:! 、++ 、-- 、+ 、- 、& 、* 、~ 、sizeof 、(类型)
- 关系操作符:> 、>= 、< 、<= 、== 、!=
- 逻辑操作符:&& 、|| 、!
- 条件操作符:? :
- 逗号表达式: ,
- 下标引用: [ ]
- 函数调用:( )
- 结构成员访问: . 、->
1. 算术操作符
算术操作符:+ 、- 、* 、/ 、%
+ 、- 、* 、/ 、% 都是双目操作符。操作符又称为运算符。
1.1 运算符 + 和 -
运算符 + 和 - 用来完成加法和减法。
运算符 + 和 - 都是有两个操作数的,位于操作符两端的就是它们的操作数。
#include<stdio.h>
int main()
{
int a = 5 + 25; // 5 和 25 都是操作数,+ 是操作符
int b = 60 - 15; // 60 和 15 都是操作数,- 是操作符
printf("%d\n",a);
printf("%d\n",b);
return 0;
}
1.2 运算符 *
运算符 * 用来完成乘法
#include<stdio.h>
int main()
{
int a = 5 * 25; // 5 和 25 都是操作数,* 是操作符
printf("%d\n", a);
return 0;
}
1.3 运算符 /
运算符 / 用来完成除法。
除号的两端如果是整数,执行的就是整数除法,得到的结果也是整数。
#include<stdio.h>
int main()
{
int a = 25 / 5; // 25 和 5 都是操作数,/ 是操作符
printf("%d\n", a);
return 0;
}
有必要提到的是:
#include<stdio.h>
int main()
{
int a = 25 / 10;
float b = 25 / 10;
printf("%d\n", a);
printf("%f\n", b);
return 0;
}
如果想得到 2.5 的浮点数,那么 运算符 / 的两个运算数里必须至少有一个是浮点数,这时C语言就会进行浮点数除法。
#include<stdio.h>
int main()
{
float a = 25 / 10.0;
float b = 25.0 / 10;
float c = 25.0 / 10.0;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
1.4 运算符 %
运算符 % 表示求模运算,即返回两个整数相除的余值。
运算符只 % 能用于整数,不能用于浮点数。
负数求模的规则是,结果的正负号由第一个运算符的正负号决定。
#include<stdio.h>
int main()
{
int a = 25 % 10;
int b = -25 % 10;
int c = 25 % -10;
int d = -25 % -7;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
printf("%d\n", d);
return 0;
}
2. 移位操作符
移位操作符:<< 、 >>
左移操作符 <<
右移操作符 >>
移位操作符的操作数只能是整数。
再看移位操作符之前呢,如果不是怎么了解(进制转换 和 原、反、补码),可以先看看我的另一篇博客:https://blog.csdn.net/m0_66687213/article/details/143448336?spm=1001.2014.3001.5502
2.1 左移操作符
移位规则:左边抛弃,右边补零
#include<stdio.h>
int main()
{
int num = 10;
int n = num << 1;
printf("%d\n", n);
printf("%d\n", num);
return 0;
}
2.2 右移操作符
移位规则:
- 逻辑右移:左边用 0 填充,右边丢弃
- 算术右移:左边用原该值的符号位填充,右边丢弃
#include<stdio.h>
int main()
{
int num = -1;
int n = num >> 1;
printf("%d\n", n);
printf("%d\n", num);
return 0;
}
逻辑右移1位演示:
算术右移1位演示:
注意:对于移位操作符,不要移动负数位,这个是标准未定义的。
3. 位操作符
位操作符:& 、| 、^ 、~
3.1 按位与 &
#include<stdio.h>
int main()
{
int a = 10;
int b = 3;
int c = a & b;
//a的补码为:00000000 00000000 00000000 00001010
//b的补码为:00000000 00000000 00000000 00000011
//a & b 就是把 a 的补码和 b 的补码按位进行与运算
//1 & 1==1
//0 & 1==0
//1 & 0==0
//0 & 0==0
//a的补码为: 00000000 00000000 00000000 00001010
//b的补码为: 00000000 00000000 00000000 00000011
// a & b 的补码为: 00000000 00000000 00000000 00000010
//
printf("%d", c); //输出结果为 2
return 0;
}
3.2 按位或 |
#include<stdio.h>
int main()
{
int a = 10;
int b = 3;
int c = a | b;
//a的补码为:00000000 00000000 00000000 00001010
//b的补码为:00000000 00000000 00000000 00000011
//a | b 就是把 a 的补码和 b 的补码按位进行或运算
//1 | 1==1
//0 | 1==1
//1 | 0==1
//0 | 0==0
//a的补码为: 00000000 00000000 00000000 00001010
//b的补码为: 00000000 00000000 00000000 00000011
// a | b 的补码为: 00000000 00000000 00000000 00001011
//
printf("%d", c); //输出结