文章目录
一、操作符
(一)操作符的类型
1.算术操作符
+ - * / %
对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数执行的就是浮点数除法。
% 操作符的两个操作数必须为整数。返回的是整除之后的余数。
2.移位操作符
注:移位操作符的操作数只能是整数。
<< 左移操作符 —— 对整数使用有乘二的效果
>> 右移操作符 —— 对整数使用有除二的效果
(1)左移操作符:
左边抛弃,右边补0。
(1)右移操作符:
右移操作符有两种,取决于编译器,例如我们对-10进行右移。
1.(逻辑移位):左边补0,右边抛弃。
2.(算数右移):左边用符号位填充,右边丢弃。
3.位操作符(二进制)
& 按位与 同为1取1,否则取0
| 按位或 含有1取1,否则取0
^ 按位异或 相同取0,不同取1
满足交换律 a^b^a = a^a^b
a^a = 0 a^0 = a
~ 按位取反 对二进制位取反
位操作符在很多场景里面有奇效,下面例举几个例题
(1)不使用第三个变量,将a和b的值交换。
int main()
{
int a = 3;
int b = 5;
printf("交换前:a=%d b=%d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
(2)统计整形中二进制中含1的数量
方法一:采用模2取余数的方法,依次得到每一位。
int count_bit_one1(unsigned int n)
{
int count = 0;
while (n)
{
if ((n % 2) == 1) count++;
n = n / 2;
}
return count;
}
方法二:依次对每一位和1发生&运算。
int count_bit_one2(int n)
{
int count = 0;
for (int i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1) count++;
}
return count;
}
方法三:用算法n&(n - 1)可以削去n的二进制位最右边的一
int count_bit_one3(int n)
{
int i = 0;
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
(3) 编写代码将13二进制序列的第5位修改为1,然后再改回0
int main()
{
int a = 13;
//原码 00000000000000000000000000001101
//加一操作:
//1 << (n - 1) 00000000000000000000000000010000
int n = 5;
a = a | (1 << (n - 1));
printf("%d\n", a);
//去一操作:
// 00000000000000000000000000011101
// 11111111111111111111111111101111
a &= ~(a << (n - 1));
printf("%d\n", a);
return 0;
}
4.赋值操作符
=
尽量不要使用连等,便于调试,防止歧义
5.单目操作符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
( ) 强制类型转换
6.关系操作符
> >= < <= != ==
不小心写错” = “ 和” == “,会造成错误。
7.逻辑操作符
&& 逻辑与
|| 逻辑或
&& : 表达式两端都为真,那么为真,否则为假。在执行中,如果判断出一个为假,就不用继续判断。
|| :表达式只要含有真,结果为真,否则为假。在执行中,如果判断出一个为真,就不用继续判断。
8.条件操作符
exp1 ? exp2 : exp3
如果表达式exp1为真,返回表达式exp2的值,为假返回表达式exp3的值。
9.逗号表达式
exp1, exp2, exp3....expN
从左向右计算,返回最后一个表达式的值。
(二)操作符的优先级
二、结束语:
关于操作符,其实十分重要但是我们又常常忘记它的用途,如果觉得小编写的还算全面,那就支持一下吧,小编会继续给出一些有用的知识,给个收藏加关注,学习路上不迷路!