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