目录
- 操作符的分类
- 算术操作符
- 移位操作符
3.1 左移操作符
3.2 右移操作符
- 位操作符
- 赋值操作符
总结
- 操作符的分类
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
- 算术操作符
-
-
- / %(加法,减法,乘法,取余,取模)
-
1
代码演示:
include<stdio.h>
int main()
{
float b = 7 / 2;
float c = 7.0 / 2;
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
运行结果:
注意:对于 / 操作符如果两个操作数都为整数,执行整数除法,而只要有浮点数执行的就是浮点数除法
代码演示:
include<stdio.h>
int main()
{
int a = 7 % 2;
float b = 7 % 2;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
1
2
3
4
5
6
7
8
9
运行结果:
由结果可知:变量的类型使用错误的话,结果也是错误的
还要注意:
除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数
% 操作符的两个操作数必须为整数,返回的是整除之后的余数
- 移位操作符
<< 左移操作符 >> 右移操作符
3.1 左移操作符
移位规则:左边抛弃、右边补0。
整数是 int 型,占4个字节,有32位表示。其中最高位表示符号,0为正,1为负整数。
函数printf打印的是整数的原码
操作符对整数操作的流程:
(1)先将整数的原码转换成反码
(2)反码 +1转换成补码
(3)最后对整数的补码进行操作
(4)操作结束后,将操作后的补码 -1 转换成反码
(5)将反码转换成最终的原码
正数左移一位:
代码演示:
include<stdio.h>
int main()
{
int a = 2;// 00000000 00000000 00000000 00000010 2的补码
int b = a << 1;//操作的补码二进制位,a本身结果不变
printf("%d\n", a);// 2
printf("%d\n", b);// 4
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
分析:
运行结果:
结果表明分析是正确的,且正数左移一位相当于乘2,负数分析的思路相同,需要注意负数原码反码补码之间的关系。
注意:对于移位运算符,不要移动负数位,这个是标准未定义的
intnum=10;
num>>-1;//error