首先在使用位向量操作符时强烈建议使用无符号类型、因为有符号类型在不同的机器上有不同的实现、所以有可能造成代码无法通用!
按位取反、按位或和按位与就不讲了、都比较简单易懂、讲按位异或吧
^、
比如有两个操作数、 12 ^ 17
所有按位操作都要先转换成二进制
12为1100
17为10001
按位异或的规则为同为1或者同为0则为0、否则都为1
下面比较两者、12的二进制为4位、要与17比较则12的二进制向左补0
01100 ->12
10001 ->17
11101 ->结果为29
再讲讲移位操作符吧、其实也狠简单、理解了就OK
比如这个例子 3 << 7
老例子、先转化成二进制、不过这里不需要两个都转化成二进制、只要把左操作数转化就可以了
现在这个例子是左移位方向、把3转化成二进制、然后向左移动
0011 -> 3
左移是右端空出的位用0来填补、这里的移位是3、所以结果为
110000000 -> 结果为384
右移也一样、3 >> 7、往0011右边移7位、由于3为int型、转认是4位的、所以向右移7位等于向左填充7个0、
000000011
但是除了前4位以外、后面都是长度之外被挤出去的、所以实际为
0000 ->也就是结果为0
参考文章: