位运算

运算符 含义
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左位移
>> 右位移
  • 按位与运算符(&)
    按位与运算将两个运算分量的对应位按位遵照以下规则进行:
    0&0=0;0&1=0;1&0=0;1&1=1;
    即同为1的位,结果为1,否则结果为0
    例:3&5
    转二进制
    3:0000 0011
    5:0000 0101
    &:0000 0001
    其结果十进制为:1
  • 按位或运算符(|)
    按位或运算将两个运算分量的对应位按位遵照以下规则进行计算:
    0|0=0;0|1=1;1|0=1;1|1=1;
    即只要有1个是1的位,结果为1,否则为0
    例:3|5
    3:0000 0011
    5:0000 0101
    |: 0000 0111
    其结果为十进制:7
  • 按位异或运算符(^)
    0^0=0;0^1=1;1^0=1;1^1=0
    即相应位的值相同,结果为0,不相同的结果为1
    例:3^5
    3:0000 0011
    5:0000 0101
    ^:0000 0110
    其结果为十进制:6
  • 按位取反运算符(~)
    按位取反运算是单目运算符,用来求一个位串信息按位的反,即哪些0的位,结果是1,而哪些为1的位,结果是0
    例:~7
    换二进制:0000 0000 0000 0111
    ~:1111 1111 1111 1000
    转换十六进制位:0xfff8
  • 移位运算
    移位运算用来将整型或字符型数据作为二进位信息串作整体移动分:<<(左移)和>>(右移)
    移位运算是双目运算,有两个运算分量,左分量为移位数据对象,右分量的值移位位数,移位运算符将左运算分量视为作由二进制位组成的位串信息,对其作向左或向右移位,得到新的位串信息

    规则:移位运算式,byte、short和char类型移位后的结果会变成int类型,对byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同,移动long型的数值时,规定实际的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同
    左移运算符是将一个二进制的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算符是将一个二进制位的操作数按指定移动的位数向右移动,移除位被丢弃,左边移除的空位或者一律补0,或者补符号位,这由不同的机器而定,在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1.

    例:5 << 2
    首先把5转换为二进制数 0000 0101 然后把该数高位(左侧)的俩个零未出,其它的数字都朝左平移2位,最后在低位(右侧)的两个空位补零,得到的结果是 0001 0100 最后转换成十进制:20
    数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就是相当于乘以2的n次方

    例:40 >> 2
    按二进制形式把所有数字向右移动2为,并舍弃出界的数字,高位的空位补符号位,即正数补0,负数补1
    0010 1000 位移后 0000 1010 转换十进制:10
    数学意义:右移一位相当于除以2,右移n位相当于除以2的n次方

你可能感兴趣的:(位运算)