位運(yùn)算

基本符號(hào)

& 與

A B L=A & B
0 0 0
0 1 0
1 0 0
1 1 1

| 或

A B L=A | B
0 0 0
0 1 1
1 0 1
1 1 1

^ 異或

A B L=A ^ B
0 0 0
0 1 1
1 0 1
1 1 0

~ 非

不理解Python的 ~ 運(yùn)算符 。
~x=-x-1

>> 右移位

<< 左移位

>>> 填充高位

Python 沒有此項(xiàng)操作。

注: Python 支持位運(yùn)算符。
\qquadPython 數(shù)據(jù)保存格式為 10 進(jìn)制, ^ 異或運(yùn)算 先變?yōu)槎M(jìn)制,異或,保存時(shí)又會(huì)變成十進(jìn)制。
\qquadPython 數(shù)據(jù)長(zhǎng)度自行判斷,不存在溢出,故 1 << 35 != 1 << 3 (C\C++\Java int 只有32位)。
\qquad不存在高位補(bǔ)零運(yùn)算,如需實(shí)現(xiàn)此操作,需用 format 函數(shù)。
e.g.
>>> '{:08b}'.format(4)
'00 000 100'
注意: format 函數(shù)輸出結(jié)果為字符串

位運(yùn)算的小用途:

判斷奇偶數(shù)用 & :

>>> 3 & 1
1
>>> 4 & 1
0

獲取二進(jìn)制位為 0 還是 1 :

>>> a = 5 # 二進(jìn)制碼為101
>>> i = int (input('請(qǐng)輸入查詢位: '))-1
3
>>> b = 2 ** i
>>> c = a & b
>>> if c != 0 :
\qquad \qquadc=1
>>> print(c)
1

不用判斷語句,求整數(shù)絕對(duì)值。

此項(xiàng)功能 Python 無法實(shí)現(xiàn),Python符號(hào)位不為最高位。其他語言實(shí)現(xiàn)思路為 最高位 & 0 。將符號(hào)位清空,返回其數(shù)值。

查找重復(fù)元素

1-1000這1000個(gè)數(shù)放置在含有1001個(gè)元素的數(shù)組中,只有唯一的一個(gè)元素重復(fù),其它均只出現(xiàn)一次。每個(gè)數(shù)組空間只能訪問一次。設(shè)計(jì)一個(gè)算法,將它找出來。不用輔助存儲(chǔ)空間,能否設(shè)計(jì)一個(gè)算法實(shí)現(xiàn)?

# 生成1001位數(shù)列
import random
A=[]
a=0
for i in range(1,11):
\qquadA.append(i)
A.append(random.randint(1,10))
# 解法一
for i in range(len(A)): #1
\qquada=a^A[i]
for i in range(len(A)-1): #2
\qquada=a^A[i]
print(a)
# 偶數(shù)個(gè)相同異或?yàn)?,1和2相加,只有重復(fù)數(shù)為3個(gè),輸出只有重復(fù)位。awsl
# 解法二
''' 暴力破解 '''
B=[0]*11
for i in range(len(A)):
\qquadB[A[i]]+=1
for i in range(len(B)):
\qquadif B[i]>1:
\qquad\qquadprint(i)

以下幾題為連續(xù)。

計(jì)算二進(jìn)制數(shù)中有幾個(gè) 1

a=int(input())
d=0
for i in range(5):
\qquadb=2**i
\qquadc=a&b
\qquadif c != 0 :
\qquad\qquadd+=1
print(d)

判斷整數(shù)是不是 2 的整數(shù)次方

if d == 1 :
\qquadprint('Yes.')

一條語句判斷一個(gè)整數(shù)是不是 2 的整數(shù)次方 '''

if (a-1)&a == 0 :
\qquadprint('Yes')

0~1 浮點(diǎn)實(shí)數(shù)的二進(jìn)制表示

給定一個(gè)介于 0 和 1 之間的師叔,如 0.625 ,打印它的二進(jìn)制表示(0.101) 若該數(shù)字無法精確地用32位以內(nèi)的二進(jìn)制表示,則打印 "ERROR" .

a=float(input('輸入小數(shù) :'))
op='0.'
for i in range(32):
\quada*=2
\quadif a>1:
\qquada-=1
\qquadop+='1'
\quadelif a==1:
\qquadop+='1'
\qquadprint(op)
\qquadexit(0)
\quadelse:
\qquadop+='0'
print('ERROR')

出現(xiàn) k 次與出現(xiàn) 1 次

數(shù)組中只有一個(gè)數(shù)出現(xiàn)了 1 次,其他的數(shù)都出現(xiàn)了 k 次,請(qǐng)輸出只出現(xiàn)了 1 次的數(shù)。

#方便的解法應(yīng)該是運(yùn)用:n 個(gè) n 進(jìn)制數(shù)做不進(jìn)位加法,結(jié)果為 0 ,把輸入數(shù)字轉(zhuǎn)換位 k 進(jìn)制,再進(jìn)行不進(jìn)位相加,最后留下的就是只出現(xiàn)了 1 次的數(shù)。但是沒有想出 Python 怎樣定義 n 進(jìn)制算法。暴力萬歲……
list=list(map(int,input('請(qǐng)輸入數(shù)組:').split()))
A=[0]*10000
for i in range(len(list)):
\quadA[list[i]]+=1
for i in range(len(A)):
\quadif A[i] == 1 :
\qquadprint(i)
\qquadexit(0)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 位運(yùn)算之——按位與(&)操作——(快速取模算法) (2012-08-02 10:23:12) 分類:算法學(xué)習(xí) 由于...
    夏天的雪花雨閱讀 1,223評(píng)論 0 1
  • 位運(yùn)算符 位運(yùn)算是指按二進(jìn)制進(jìn)行的運(yùn)算。在系統(tǒng)軟件中,常常需要處理二進(jìn)制位的問題。C語言提供了6個(gè)位操作運(yùn)算符。這...
    老九君閱讀 2,053評(píng)論 0 0
  • (一):基礎(chǔ)篇 Matrix67: The Aha Moments 位運(yùn)算簡(jiǎn)介及實(shí)用技巧(二):進(jìn)階篇(1) 位運(yùn)...
    狼之獨(dú)步閱讀 1,132評(píng)論 0 1
  • Python 是一種相當(dāng)高級(jí)的語言,通過 Python 解釋器把符合語法的程序代碼轉(zhuǎn)換成 CPU 能夠執(zhí)行的機(jī)器碼...
    Python程序媛閱讀 2,031評(píng)論 0 3
  • 你的一生,需有一個(gè)促使前進(jìn)的方向,若沒有,你將如行尸走肉般的生活,未來回首,僅有遺憾之感。 初中和高中兩個(gè)升學(xué)...
    消失著閱讀 454評(píng)論 0 0

友情鏈接更多精彩內(nèi)容