2013-07-10 47 views
3

我無法理解爲什麼我想要像Python這樣的高級語言中使用按位運算符。根據我所瞭解的高級和低級語言的知識,高級別語言通常旨在讓您不必太擔心機器代碼進入計算機。雖然我絕對不是一位專家級的程序員,但我並沒有看到用我所知的旨在避免它的語言來逐步操縱程序的重點。在Python中使用按位運算而不是布爾運算有什麼優勢?

當然,這是假設我正確理解高級和低級語言的區別。

我想澄清之前,我發佈,我明白什麼是按位運算。我在這裏發現了很多問題,只是解釋了按位操作是什麼和/或指出瞭解釋操作的問題。我只是很難理解爲什麼有人會用Python比其他人更容易(在我的新手意見中)使用bug修復解決方案。

tl; dr 或者,當簡單的布爾邏輯不能使用時,使用按位運算的代碼有哪些示例?

回答

3

如果您想要在標準庫中使用按位運算符的具體示例,請查看re庫。 According to the API,這些標誌應該是按位編號OR一起編輯。

這允許您在單個參數中傳遞大量選項。請考慮以下選項:

re.compile(expression,re.I | re.M | re.X) 

re.compile(expression,ignorecase=True,multiline=True,verbose=True) 

我認爲我們可以同意,第一個版本是一個很大的緊湊至少。


你可能會想:「好吧,我更喜歡第二個 - 畢竟它更明確!」 ...你可能有這種情況。但是如果你有一個用C生成二進制文件的同事,他告訴你文件頭包含一個32位整數字段,並且該整數字段存儲解碼文件其餘部分所需的標誌?作爲一個合理的人,你想用高級語言來處理文件,在這種語言中你可以輕鬆高效地操縱數據,所以你選擇python。現在我敢打賭,你很高興你可以進行按位操作,以避免需要使用C來解碼/分析文件。

+0

我從來沒有真正想過使用它們來處理其他語言。這很有道理。非常感謝。我想我會更多地關注下週即將上演的按位操作課程。 – b4ux1t3

+0

@ b4ux1t3 - 另外,在python中,FWIW映射到它們操作的對象上的函數調用。所以,位運算符('|&^')可以被重載以在其他類型上做很酷的事情。例如,內建集合對象使用'|'表示聯合,'&'表示相交。 – mgilson

3

Python中按位運算肯定有用。除了與mgilson提到的or -ing標誌之外,我自己也使用它們來編寫CAN報文的包頭。通常,較低級別消息協議的標頭由長度不是8位倍數的字段組成,因此如果只想更改一個字段,則需要按位運算符。

Python是高級語言並不意味着你不能用它做低級別的東西!

0

幾乎所有使用傳輸協議的應用程序最終都會在某點使用按位操作 - 一組全部爲真或假的標誌通常會合併爲一個字節,最多可達8個標誌位,以節省帶寬和缺少一個包含255個值的字典來解碼它 - 不要笑我看到它在一種情況下以多種語言完成,其中有大量的if語句 - 當最多需要幾個按位操作時。