資訊內(nèi)容
Python基礎(chǔ)練習(xí)實(shí)例48(計(jì)算絕對(duì)值,位運(yùn)算實(shí)際應(yīng)用)
位操作也可以用來(lái)求絕對(duì)值,對(duì)于負(fù)數(shù)可以通過(guò)對(duì)其取反后加1來(lái)得到正數(shù)。對(duì)-6可以這樣:11111010(二進(jìn)制)–取反->00000101(二進(jìn)制)-加1->00000110(二進(jìn)制)來(lái)得到6。
因此先移位來(lái)取符號(hào)位,inti=a>>31;要注意如果a為正數(shù),i等于0,為負(fù)數(shù),i等于-1。然后對(duì)i進(jìn)行判斷——如果i等于0,直接返回。否之,返回~a+1。完整代碼如下:
i#!/usr/bin/python
# -*- coding: UTF-8 -*-
def intmy_abs(a):
i = a >> 31
res = a if i == 0 else ~a + 1
return res
print(intmy_abs(-11))
現(xiàn)在再分析下。對(duì)于任何數(shù),與0異或都會(huì)保持不變,與-1即0xFFFFFFFF異或就相當(dāng)于取反。因此,a與i異或后再減i(因?yàn)閕為0或-1,所以減i即是要么加0要么加1)也可以得到絕對(duì)值。所以可以對(duì)上面代碼優(yōu)化下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def intmy_abs(a):
i = a >> 31
return ((a^i)-i);
print(intmy_abs(-11))
注意這種方法沒(méi)用任何判斷表達(dá)式,而且有些試題就要求這樣做(^_^講解過(guò)后應(yīng)該是比較好記了)。
本站部分內(nèi)容轉(zhuǎn)載自網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系管理員及時(shí)刪除。
- 上一篇
Python turtle 繪圖畫(huà)圓
python2.6版本中后引入的一個(gè)簡(jiǎn)單的繪圖工具,叫做海龜繪圖(Turtle Graphics),turtle庫(kù)是python的內(nèi)部庫(kù),使用導(dǎo)入即可 import turtle
- 下一篇
Python基礎(chǔ)練習(xí)實(shí)例47(變換符號(hào),位運(yùn)算實(shí)際應(yīng)用)
題目:換符號(hào)就是正數(shù)變成負(fù)數(shù),負(fù)數(shù)變成正數(shù)。 思路:變換符號(hào)有很多種方法,比如用0減去這個(gè)數(shù),或者用這個(gè)數(shù)乘以-1;除了這兩種方發(fā)還可以用位運(yùn)算來(lái)變換。
