算术操作符
/除法表示商。 %取模表示商的余数
移位操作符
- <<左移 左边舍去,右边添0
- a<<2,表示向左移两位(将比特位形式的a进行移动) 如图
- 进行移位操作时,a本身的值不变,除非将值赋给a本身。
- << >>左移和右移性质相同,在这里就不累述了、
位操作符
位操作符中的“位”依旧是二进制位 ,所以关于二进制位的转化
& 按位与 就是两个变量,输出的二进制位只要有一个为0(假),则按位与的结果就是假--------------与按位或相反
| 按位或 与按位与相反,输出的二进制位只要有一个是1(真),则输出结果就为真----------------按位或,货真价实,所以与真有关。只要有一个为真,就为真。
^ 按位异或 对应的二进制位相同,则为0,对应的二进制位相反,就为真(1 )-------------------按位异或比上面两个多出一个字,所以比较麻烦,分为两步。若相同则为0,不同就为假
单目 双目 三目操作符的区别:目 代表有几个操作数
比如:a+b就是双目操作符,因为有a b两个操作数
单目操作符
- !逻辑反操作符 把真变为假,把假变为真。
输出结果为1,把假 变为真
- &取地址操作符,适用于指针
- ~ 对一个数的二进制进行按位取反
例:如果对整形 int 0进行按位取反,输出结果是-1
- 原因:首先int 表示有符号的整形,相反unsigned int 表示无符号的整形,意味着没有正负之分。
- 所以当~作用于一个有符号整形,分正负的数字上时,一切都得小心!
- 第一位表示符号位,一为正,二为负。所以将0进行按位取反时,变成32个1,第一位表示符号位,即为负。
- 又有规定负数在内存中存储的时候,存储的是二进制的补码。意味着32个1是补码
- 又因为我们在使用或打印是,是这个数的原码。
- 这时我们就有必要进行先转换
- 原码反码补码
- 原码符号位不变,其余按位取反得到反码
- 反码最后一位加1得到补码。
- 任何整数存储的都是补码,反码只是中间计算的一个状态。
- 正数的原码补码反码,三码相同
TIP:按位取反和原码得到反码的区别:
按位取反:全部取反。
反码:符号位不变,其余位取反
总结:当~出现在有符号位的变量上时,就要注意。按位取反得到的是补码,还需转换位原码!!!关键在于~按位取反一个有符号的整形!
++ --
前置和后置的区别
总结:不管前置或者后置,a都需要进行加减。但计算b时,若后置,则“后知后觉”,b不变;若前置,则与a相同!
关系操作符
&& 逻辑与
|| 逻辑或
重点落在逻辑二字,
逻辑与:二者只要有一个为假,输出结果就为假
逻辑或:二者只要有一个为真,结果就为真
&&与位操作符&的区别
本质就要回归定义。
&表示位操作符,是关于二者的二进制位;而逻辑操作符&&判断条件。
条件操作符/三目操作符
( a>b ? a : b )
流程:a>b吗?若大于,就输出A,若小于就输出B(括号内没有逗号!)