python位运算符_Python教程:按位运算符

位(bit)就是单个的0或1,位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。 首先我们来看一下什么是与运算、或运算与异或运算:

与运算: & 当条件都为真时,才为真。

1 & 1 = 1;1 & 0 = 0;

0 & 0 = 0;

或运算: | 当有一个条件为真时,即为真

1 | 1 = 1;1 | 0 = 1;0 | 0 = 0;

异或运算: ^ 当相等是为0,不相等时为1 (字面上来解释,异或就是不相等时,做或运算,即不相等时为1,相等就默认为0了)

1^1=0

1^0=1

0^0=0

Python中按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

按位与 ( bitwise and of x and y ) & 举例:

5&3 = 1 解释: 101 11 相同位仅为个位1 ,故结果为 1

按位或 ( bitwise or of x and y ) | 举例:

5|3 = 7 解释: 101 11 出现1的位是 1 1 1,故结果为 111

按位异或 ( bitwise exclusive or of x and y ) ^ 举例:

5^3 = 6 解释: 101 11 对位相加(不进位)是 1 1 0,故结果为 110

按位反转 (the bits of x inverted ) ~ 举例:

~5 = -6 解释: 将二进制数+1之后乘以-1,即~x = -(x+1),-(101 + 1) = -110

按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了。

按位左移(x shifted left by n bits)<< 举例:

5<<2 = 20 解释:101向左移动2位得到10100,即右面多出2位用0补。

按位右移 ( x shifted right by n bits)>> 举例:

5>>2 = 1 解释:101 向右移动2位得到 1,即去掉右面的2位

在优先级方面,取反运算符~跟算术运算符中的单目运算符(即

只有一个操作数参加运算)同级,并且是所有位运算符中优先级最高的;然后是移位运算符(左移<<和右移>>),它们比取反运算符和算术运算中的加减运算符低;最后是逐

位与、或和异或运算符。

各位运算符按照优先级有高到低排列如下所示:

取反运算符 > 左移运算符 > 右移运算符 > 按位与运算符 > 按位异或运算符 >

按位或运算符 在位运算符中,取反运算符(单目运算符)~的结合性是从右向左结合,其余双目运算符的结合性是从左向右结合。 下面是直接可以运行的代码,具体运行一下

,会对Python中的位运算体会得更深一些。注意,因为Python是弱类型的编程语言,所以没有其它进制的数值表示,都是以字符串的形式来表现的。# -- coding:utf-8 -

'''

对整数转换成的二进制字符串进行格式化

'''

def formatbin(int_val):

str_val = bin(int_val)

if str_val.startswith('-'):

return(str_val[0:1] + str_val[3:])

return(str_val[2:])

val_a = 53

val_b = 26

val_c = val_a & val_b

print( ' ' * 3 + formatbin(val_a).zfill(6))

print( '& ' + formatbin(val_b).zfill(6))

print('-' * 9)

print(' ' * 3 + formatbin(val_c).zfill(6))

print

val_c = val_a | val_b

print( ' ' * 3 + formatbin(val_a).zfill(6))

print( '| ' + formatbin(val_b).zfill(6))

print('-' * 9)

print(' ' * 3 + formatbin(val_c).zfill(6))

print

val_c = val_a ^ val_b

print( ' ' * 3 + formatbin(val_a).zfill(6))

print( '^ ' + formatbin(val_b).zfill(6))

print('-' * 9)

print(' ' * 3 + formatbin(val_c).zfill(6))

print

val_c = ~ val_a

print( '~ ' + formatbin(val_a).zfill(6))

print('-' * 9)

print(' ' * 2 + formatbin(val_c).zfill(6))

print

val_c = val_a >> 1

print( '>> ' + formatbin(val_a).zfill(6))

print('-' * 9)

print(' ' * 4 + formatbin(val_c).zfill(5))

print

val_c = val_a << 1

print( '<< ' + formatbin(val_a).zfill(6))

print('-' * 9)

print(' ' * 2 + formatbin(val_c).zfill(6))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值