1.操作符分类:
算数操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号操作符
下标引用、函数调用和结构成员
2.算术操作符
+ - * / %
ps:
1. 除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。
2. 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除 法。
3.%操作符的两个操作数必须为整数。返回的是整除之后的余数。
3.移位操作符
<< 左移操作符
>> 右移操作符
4.位操作符
& //按位与
| //按位或
^ //按位异或
注:他们的操作数必须是整数。
异或运算:若ab两数计算,ab两数相同,异或结果为0,否则ab两数不相同,结果为1
5.赋值操作符
= //赋值操作符
复合操作符:一类C/C++独有的复合赋值运算符。它们实际上是一种缩写形式,使得对变量的改变更为简洁。
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 模运算赋值
<<= 左移赋值
>>= 右移赋值
&= 位逻辑与赋值
|= 位逻辑或赋值
^= 位逻辑异或赋值
例如:
Total=Total+3;
它的意思是本身的值加3,然后在赋值给本身。为了简化,上面的代码也可以写成:
Total+=3;
6. 单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
对于前置与后置的区别:
例如i++
后置是先用再加,即先进行当前运算然后再进行自加
而前置是先加后用
7.关系操作符
>
>=
<
<=
!= 用于测试“不相等”
== 用于测试“相等”
ps:需要注意=赋值符号与==相等符号关系
8.逻辑操作符
&& 逻辑与
|| 逻辑或
9. 条件操作符
exp1 ? exp2 : exp3
该操作符使用时:exp1表达式为真时执行exp2,exp1表达式为假则执行exp3
10.逗号表达式:
exp1, exp2, exp3, …expN
逗号表达式:
就是用逗号隔开的多个表达式。从左向右依次执行。整个表达式的结果是最后一个表达式的结果
11.操作符属性
复杂表达式的求值有三个影响的因素。
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
两个相邻的操作符先执行哪个?取决于他们的优先级。如果两者的优先级相同,取决于他们的结合性。 操作符优先级
常见简单编程题
1.求两个数二进制中不同位的个数
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:1199 2299
输出例子:7
思路:
1. 先将m和n进行按位异或,此时m和n相同的二进制比特位清零,不同的二进制比特位为1
2. 统计异或完成后结果的二进制比特位中有多少个1即可
int main()
{
int a = 0;
int b = 0;
scanf_s("%d %d", a, b);
printf("请输入两个所要比较的数字");
int c = a ^ b; //c代表a和b相异或后有多少不同就有多少个1
int count = 0;
while (c != 0)
{
count++;
c = c & (c - 1);
}
printf("共有%d个不同的数字", count);
return 0;
}
2.打印整数二进制的奇数位和偶数位
获取一个整数二进制序列中的偶数位和奇数位,分别打印出二进制序列
思路:
1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0
2. 以同样的方式提取偶数位置
检测num中某一位是0还是1的方式:
1. 将num向右移动i位
2. 将移完位之后的结果与1按位与,如果:
结果是0,则第i个比特位是0
结果是非0,则第i个比特位是1
void print(int num)
{
for (int i = 31; i >=1 ; i = i-2)
{
printf("%d ", ((num >> i) & 1)); //num向右移动i位和1相与,提取出偶数位
}
printf("\n");
for (int i = 30; i >= 0; i = i - 2) //num向右移动i位和1相与,提取出奇数位
{
printf("%d ", ((num >> i) & 1));
}
printf("\n");
}
3.统计二进制中1的个数
写一个函数返回参数二进制中1的个数
例如:15 00001111
输出的值应为4个1
void cal(int num)
{
int count = 0;
for (int i = 0; i <32 ; i++)
{
if (((num >> i) & 1) == 1)
{
count++;
}
}
printf("共有%d个1", count);
}