Java中位运算知识:
1.“按位与”运算的运算符位“&”,为双目运算符。“按位与”运算的运算法则是:如果两个整型数据a、b对应位都是1,则结果位才是1,否则为0.如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
整数5的二进制:00000000 00000000 00000000 00000101
整数-4的二进制:11111111 11111111 11111111 11111100
5&4的结果为: 00000000 00000000 00000000 00000100
2.“按位或”运算的运算符为“|”,为双目运算符。“按位或”运算的运算法则是:如果两个操作数对应位都是0,则结果位才是0,否则为1。如果两个操作数的精度不同,则结果的精度与精度高的操作数相同。
整数3的二进制:00000000 00000000 00000000 00000011
整数6的二进制:00000000 00000000 00000000 00000110
3|6的结果为: 00000000 00000000 00000000 00000111
3.“按位取反”运算也称“按位非”运算,运算符位“~”,为单目运算符。“按位取反”就是将操作数而二进制中的1修改为0,0修改为1。
整数7的二进制为:00000000 00000000 00000000 00000111
~7的二进制为: 11111111 11111111 11111111 111111000
4.“按位异或”运算的运算符是“^”,为双目运算符,“按位异或”运算的运算法则是:当两个操作数的而进制表示相同(同时为1或0时),结果位0,否则为1。若两个操作数的精度不同,则结果数的精度与精度高的操作数相同。
10的二进制为:00000000 00000000 00000000 00001010
3的二进制为: 00000000 00000000 00000000 00000011
10~3的结果为:00000000 00000000 00000000 00001001
5.以为运算对数据按二进制进行以为操作。Java中的移位运算符有以下3种。
<<:左移
>>:右移
>>>:无符号右移
左移就是讲运算符左边的操作数的二进制数据按照运算符右边操作数指定的位数向左移动,右边移空的部分补0。
右移则复杂一些,当使用“>>”符号时,如果最高位是0,右移空的位就填入0;如果最高位是1,右移空的位就填入1。
Java还提供无符号右移“>>>”,无论最高位是0还是1,左侧被移空的高位都填入0;
注意:移位运算符适用的数据有:byte、short、char、int、long
技巧:移位可以实现整数乘以或除以2n的效果。例如,y<<2与y*4的结果相同;y>>1与y/2的结果相同。总之,一个数左移n位,就是将这个数乘以2n;一个数右移n位,就是将这个数除以2n。