您現在的位置是:首頁 » python編程資訊
資訊內容
Python基礎練習實例48(計算絕對值,位運算實際應用)
極客小將2020-11-06-
位操作也可以用來求絕對值,對于負數可以通過對其取反后加1來得到正數。
位操作也可以用來求絕對值,對于負數可以通過對其取反后加1來得到正數。對-6可以這樣:11111010(二進制)–取反->00000101(二進制)-加1->00000110(二進制)來得到6。
因此先移位來取符號位,inti=a>>31;要注意如果a為正數,i等于0,為負數,i等于-1。然后對i進行判斷——如果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))
現在再分析下。對于任何數,與0異或都會保持不變,與-1即0xFFFFFFFF異或就相當于取反。因此,a與i異或后再減i(因為i為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))
注意這種方法沒用任何判斷表達式,而且有些試題就要求這樣做(^_^講解過后應該是比較好記了)。
本站部分內容轉載自網絡,如有侵權請聯(lián)系管理員及時刪除。
