一.算术操作符
+ - * / %
1.要点:
除了%操作符之外,其他操作符都可以作用于整数和浮点数
对于/操作符如果两个操作数都为整数,则执行整数除法;只要有浮点数,浮点数除法
%操作符的两个操作数必须为整数。返回的是整除后的余数
除法 / 想要得到小数,保证除数和被除数中至少有一个是浮点数
(5.0/2——>2.5)
二.负数原码,反码,补码的互推
1.按位取反操作符:~(二进制位)
~:二进制位0变1,1变0
00000000000000000000000000000001 11111111111111111111111111111110 按位取反后
2.原反补互推演示
原理:
例子:
三.进制位的表示
1.不同进制位的特征:
进制位的表示范围都为(0~进制位-1)
例:10进制位(0~9) 8进制位(0~7)
2.二进制位表示
进制位从右往左,分别代表进制位的数×进制位的0到若干次方
例:二进制表示15
3.整型的二进制表示
四.移位操作符
1.左移操作符
- 补码移动,空缺补0
- 左移效果:扩大二倍 (负数也适用,例:4->8,-4->-8)
PS:涉及原反补码的运算,不清楚+1-1的可以看本博客原反补码块知识点
图示:
2.右移操作符
- 逻辑右移:左边丢弃,左边补0
- 算术右移(正负数):右边丢弃,左边补原符号位(保持原来的符号位)
图示:
五.位操作符
1.使用禁忌:
不要移动负数位,此行为未定义!
2.位操作符一览:
1.按位与&:有0为0,全1为1
2.按位或 |:有1为1,全0为0
3.按位异或^:相同为0,相异为1
3.位操作符的注意要点:
他们的操作数必须是整数!
位操作的应用场景,一般是补码层面的运算
4.位操作符使用演示:
5.位操作符的应用:“不创建临时变量实现两个数的交换”
原理:
- 任何数 和0 亦或^都是它自己,两个相同的数亦或^都为0
- 运算后不会发生进位
int main() { int a=10; int b=20; //二进制层面,每一位只有0/1两种可能 a=a^b; 此时,a相当于在二进制层面上,原来ab两数二进制各位的集合 b=a^b; 根据相同数亦或为0,b中存储的是集合排除掉b后的结果,即本来的a a=a^b; 根据相同数亦或为0,此时存储的是集合排除掉本来的a后的结果,即b }
6.位操作符的应用:“求一个整数存储在内存的二进制中1的个数”
法一:利用移位操作符
原理:按位与&1,按位右移。统计32次后按位与1结果之和
代码演示:
int main() { int count=0; for(int i=0;i<32;i++) { if((n>>1)&1)==1) { count++; } } return 0; }
法二: 利用二进制原理
原理:
- 模%2相当于拿到二进制位中的最右边一位
- 除/2相当于拿到二进制位中的最右边边以外的二进制序列