python中的位运算符是按照二进制位对值进行操作的,因此在学习位运算之前,我们来看看二进制运算。
二进制运算:
整数转二进制:将正的十进制数除以二,得到的商再除以二,依次类推知道商为零或一时为止,然后在旁边标出各步的余数,最后倒着写出来,高位补零就OK
<ignore_js_op>
负整数转换成二进制 :先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。还以42为例,负整数就是-42。
<ignore_js_op>
小数转换为二进制 :对小数点以后的数乘以2,有一个结果吧,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列,举个例子吧,比如0.125 。
<ignore_js_op>
python中的位运算符:
1、与(&),按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
5&3 = 1 ---------- ------> 101 011 001 相同位仅为个位1 ,故结果为 1
2、或(|),按位或运算符:只要对应的两个二进位有一个为1时,结果位就为1
5|3 = 7 ---------- ------> 101 011 出现1的位是 1 1 1,故结果为 111
3、异或(^),按位异或运算符:当两对应的二进位相异时,结果为1
5^3 = 6 ---------- ------> 101 011 对位相加是 1 1 0,故结果为 110
4、取反(~),按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1
~5 = -6 ---------- ------> ~x = -(x+1),-(101 + 1) = -110
~7 = -(0111+1)= -1000 = -8
5、左位移(<<),运算数的各二进位全部左移若干位,由<<右边的数字指定了移动的位数,高位丢弃,低位补0
5<<2 = 20 ---------- ------> 101 向左移动2位得到 10100 ,即右面多出2位用0补
6、右位移(>>),把‘>>’左边的运算数的各二进制位全部右移若干位,>>右边的数字指定了移动的位数
5>>2 = 1 ---------- ------> 101 向右移动2位得到 001 ,即左边用0补
更多技术资讯可关注:gzitcast