一. 与(&)运算: 同为1才为1
5 二进制 101
3 二进制 011
结果 001
二. 或(|)运算:有一个为1,则为1
5 二进制 101
3 二进制 011
结果 111
三.异或(^)运算:不相同则为1
5 二进制 101
3 二进制 011
结果 110
四. 左移(<<)运算 : 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
3 << 2为例:
//3的2进制数
0000 0000 0000 0000 0000 0000 0000 0011
//3<<2 把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零
0000 0000 0000 0000 0000 0000 0000 1100
首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.
数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。所以3 << 2 ,其实相当于 3* 2^2 = 12
五. 右移(>>)运算 : 按二进制形式把所有的数字向右移动对应移动位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1
以11 >> 2为例 :
//11的32位二进制形式
0000 0000 0000 0000 0000 0000 0000 1011
//11 >> 2,把低位的最后两个数字移出,因为该数字是正数,所以在高位补零
0000 0000 0000 0000 0000 0000 0000 0010
计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是2.
数学意义:右移一位相当于除2,右移n位相当于除以2的n次方,正数舍,负数进 , 11>>2相当于 : 11 /2^2 = 11/4 = 2
补充: 负数的右移 -31>>3
1111 1111 1111 1111 1111 1111 1110 0001(-31)右移3位 ,把低位的最后三个数字移出(变成1110 0),因为该数字是负数,所以在高位补1(补三个1),
结果是111 1111 1111 1111 1111 1111 1111 1110 0(-4)。
对于负数的三十二位(int)二进制补充说明 : 二进制数分为有符号数和无符号数,有符号数里面才有正负之分。其中第一位为符号位,1代表负数,0代表正数。例如 4就是0000 0000 0000 0000 0000 0000 0000 0100,-4就是1111 1111 1111 1111 1111 1111 1111 1100 (从左边最后一个1开始算)
六 . 无符号右移(>>>)运算 : 按二进制形式把所有的数字向右移动对应移动位数,低位移出(舍弃),高位的空位补零,对于正数来说和带符号右移相同,对于负数来说不同。
如:15>>>2的结果是3,-31>>>3的结果是536870908,移出的部分将被抛弃:
同样转为二进制的形式,00000000 00000000 00000000 00001111(15)右移2位的结果是00000000 00000000 00000000 00000011(3),
1111 1111 1111 1111 1111 1111 1110 0001(-31的32位2进制数)右移3位的结果是000 1111 1111 1111 1111 1111 1111 1110 0(536870908)。