常用位操作符
1、位与 &(注:两个&是逻辑与,一个&才是位与)
位与和逻辑与的区别:位与时两个操作数是按照二进制位批次对应位相与的,逻辑与
是两个操作数作为整体来相与的。(例:0xAA&0xF0=0xA0,0xAA&&0xF0=1)
特点:(任何数,其实就是1或者0)与1位与无变化,与0位与变成0。
2、位或|(注:两个|是逻辑或,一个|才是位或)
位或与逻辑或的区别同上
特点:(任何数,其实就是1或者0)与1位或变成1,与0位或无变化。
3、位取反~(注:逻辑取反是!)
位取反是将操作数的二进制位逐个按位取反,每一位上1变0,0变1;逻辑取反就是
真变成假,假变成真。
连续取反(一个非0数连续按位取反两次,会得到原操作数;一个非0数连续两次按
逻辑取反,会得1)
4、位异或^(相同为0,不同为1)
1^1=0 0^0=0 1^0=1 0^1=1
特点:(任何数,其实就是1或者0)与1位异或会取反,与0位异或无变化。
5、左移位<< 右移位>>
C语言的移位要取决于数据类型。
对于无符号数,左移时右侧补0(相当于逻辑移位)
对于无符号数,右移时左侧补0(相当于逻辑移位)
对于有符号数,左移时右侧补0(算术移位,相当于逻辑移位)
对于有符号数,右移时左侧补符号位(如果正数就补0,负数就补1,叫算术移位)