前言
各位师傅好,我是qmx_07,今天给大家带来 运算符的讲解,重点关注 移位操作符,以及位运算符,之后的内容会一直持续更新!
移位运算符
概念:移位运算符 主要是涉及到整型变量的二进制位进行修改,分别是 左移运算符、右移运算符
在正式讲解之前,我们先要介绍一下 原码、反码、以及补码
比如说 int n = -10;
原码: 1 0000000 00000000 00000000 00001010 转换成二进制数 ,最前面的0那个位是 正反位,0为正数,1为负数
反码:1 1111111 11111111 11111111 11110101 把原码 除了正反位不动,其他位置变一下
补码:1 1111111 11111111 11111111 11110110 简单来说,就是+1
还有最重要的一点:
正数的 原码 反码 补码,都是相同的
可能上面会有小伙伴疑问,为什么是32位呢,这是因为 整型占四个字节,一个字节八位
左移运算符
左移运算符,使用整型的补码进行向左移动,左抛右补
根据上面的运算,结果应该是20
需要注意一点是,改变变量值,需要重新赋值才可以
右移运算符
右移运算符涉及到逻辑移位和算术移位,我介绍的是比较常用的:左边用原该值的符号位填充,右边丢弃
注意要用 补码运算
特别说明:对于移位运算符,不要移动负数位,这个是标准未定义的。
位操作符
这些操作符同样是在 二进制位下进行运算的,并且只能是整型
按位与
在补码的基础上,去对比二进制位数,都是1 才为1
按位或
或运算 有1就是1
按位异或
相同为0,相异为1
算术操作符
+ - * / % 这些都是很常见的数学运算符,主要讲解最后一个
10/4 = 2 ....2 %这个符号,就是取余数
关系运算符
1.>
2.>=
3.<
4.<=
5.!= 用于测试“不相等”
6.== 用于测试“相等”------------------------------------------------------------------------
举个例子
a= 15 b = 20
a > b 返回0 假
a < b 返回1 真
逻辑运算符
&& 逻辑与 //只要出现假,整个语句就是假
|| 逻辑或 //只要出现真,整个语句都为真
条件操作符
exp1 ? exp2 : exp3
特点: exp1为真就执行exp2,exp1为假就执行exp3
下面是这个程序的运行图:
赋值运算符
+=
-=
*=
/=
%=
>>=
<<=
&=
|=
^=
这些运算符我举个例子: int num = 10; int a = 3;
我想要让a和num相加 如果写成 num = num + a; 是不是特别麻烦呀
可以简化成: num += a; 其他类似
单目运算符
! 逻辑反操作
- 负值
+ 正值
& 取地址
sizeof 操作数的类型长度(以字节为单位)
~ 对一个数的二进制按位取反
-- 前置、后置--
++ 前置、后置++
* 间接访问操作符(解引用操作符)
(类型) 强制类型转换
前置++、-- 后置++、--问题
sizeof讲解
&取地址 和 *解引用
再更具体的讲法,到后面指针 进行讲解
~取反
逗号表达式
exp1, exp2, exp3, …expN
特点:
逗号表达式,就是用逗号隔开的多个表达式。
逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
if () 判断逻辑: a > b :1 >2 为假 不进入,a + b > 0: 1 + 2 = 3 > 0 ,是逗号表达式 以最后为主