切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
【Love Python】【07】不可不知的一招半式之难缠的符号[复制链接]
发表于 2014-4-30 08:47:33 | 显示全部楼层 |!read_mode!
一.难缠符号之一(位移)
>>右位移
<<左位移

bin()十进制转二进制
>>> a = 1
>>> bin(a)
'0b1'
>>> bin(1)
'0b1'
>>> bin(2)
'0b10'
>>> bin(3)
'0b11'
>>> bin(4)
'0b100'
>>> bin(5)
'0b101'
>>> 

位移是指的操作二进制值,如右移:
>>> bin(5)
'0b101'
>>> 5 >> 1
2
>>> bin(2)
'0b10'
>>> 5 >> 2
1
>>> bin(1)
'0b1'
>>> 

左移同理只是方向相反,如:
>>> bin(11)
'0b1011'
>>> 11 << 2
44
>>> bin(44)
'0b101100'
>>> 

按十进制的方式可以理解为左移一位等于乘以10(是指的二进制值乘以10)
左位移的十进制公式可以这样:
>>> 4 << 3
32
>>> 5 << 3
40
>>> 4 * (2 ** 3)
32
>>> 5 * (2 ** 3)
40
>>> 

二.难缠符号之二 (按位与&)
>>> 3 & 4
0
>>> bin(3)
'0b11'
>>> bin(4)
'0b100'
>>>

首先把二进制码右对齐(0b之后的值),上下一位一位的比较,两者都为1则值为1,否则为0
011
100
结果为
000
及十进制的0
>>> 32 & 100
32
>>> bin(32)
'0b100000'
>>> bin(100)
'0b1100100'
>>> bin(32 & 100)
'0b100000'
>>> 

三.难缠符号之三(按位或 |)
和&类似,首先把二进制码右对齐(0b之后的值),上下一位一位的比较,两者只要有一个为1则值为1,否则为0

四.难缠符号之四 (按位异或)

五.难缠符号之五 (按位取反)

小题一枚:
熟练看懂下面的逻辑
print  [(2*(x/2)>>0,2*(x%2)) for x in xrange(4)]   
print  [((x>>1)<<1,(x & 1)<<1) for x in xrange(4)] 

友情提示本文档为连载系列:) 抚菊深思@t00ls.net

操千曲而后晓声,观千剑而后识器。

代码区

GMT+8, 2019-9-23 21:27

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部