基础的十进制按位运算总结与在Python中的计算示例
与运算&
举例:
3&5
解法:3的二进制补码是11, 5的是101,3&5也就是011&101,先看百位(其实不是百位,这样做只是便于理解)一个0一个1,根据(1&1=1,1&0=0,0&0=0,0&1=0)可知百位应该是1,同样十位上的数字1&0=0,个位上的数字1&1=1,因此最后的结果是1.(这之后本来应该还有一步,因为我们现在得到的数值只是所求答案的补码,但是因为正数的补码即是它本身,所以就省略了。不过,下面的例子就不能省略最后这一步了).
-1&-2
解法:-1的补码是11111111, -2的补码是11111110,11111111&11111110得到的结果是:11111110,这个是补码,再转化位原码为100000010(负数转换位原码的方法是减一取反),最后转换为十进制是-2.
-2&6
解法:-2的补码是11111110, 6的补码是110, 11111110&110,也就是11111110&00000110(这样写的目的是让初学者能够更好理解按位运算),按照上面的方法得到的结果是:110,转化位十进制就是6.
小技巧:利用按位与可以将任意二进制数的最后一位变为0,即就是X&0.
eg:
a=5 b=3 printa&b
结果:1
这是怎么算的呢,其实是通过a和b的二进制算的。
#a的b的二进制 #0*2**3+1*2**2+0*2**1+1*2**0 #开始与运算 a=0101 b=0011
结果:0001
与运算就是比较a和b的二进制如果位数都为1则算为1,如果不想同或都为0则算为0。然后再把答案的二进制转为10进制。
或运算|
举例:
4|7
解法:按位并的计算规律和按位与的很相似,只不过换了逻辑运算符,并的规律是:1|1=1,1|0=1,0|0=0. 4|7转换位二进制就是:100|111=111. 二进制111即为十进制的7.
小技巧:利用按位并可以将任意二进制数的最后一位变为1,即就是X|1.
eg:
a=5 b=3 printa|b
结果: print 7
a=0101 b=0011
a|b结果是:0111
或运算正好与与运算相反,如果位数都不为0则算为1,否则算为0。
异或操作
方法:对位相加,特别要注意的是不进位.
举例:
2^5
解法:10^101=111,二进制111得到十进制的结果是7.
1^1
解法:1+1=0.(本来二进制1+1=10,但不能进位,所以结果是0)
-3^4
解法:-3的补码是11111101,4的补码是100(也即00000100),11111101^00000100=11111101,补码11111101转为原码是1000111,即十进制的-7.
a=5 b=3 printa^b
结果:6
a=0101 b=0011
a^b结果是0110
异或操作是位数不想同则算为1,否则算为0。
左移与右移
1.左移运算符 <<
方法:X<<N将一个数字X所对应的二进制数向左移动N位.
举例:
3<<2
解法:11向左移动两位变为1100,即12.
2.右移动运算符 >>
方法:X>>N将一个数字X所对应的二进制数向右移动N位.
举例:
3>>2
解法:11向右移动两位变为0.
10>>1
解法:10的二进制是1010,向右边移动一位是101,即5.
a=5 b=2 printa<<b结果是20
a=0101 b=2
a<<b结果:10100
位移运算会把二进制数向左或向右移动,如上就是向左移动了2个单位。