簡體   English   中英

是否值得在方法中使用按位運算符?

[英]Is It Worth Using Bitwise Operators In Methods?

我是Java的新手(一般編程,我之前的經驗是使用ActionScript 2.0和一些簡單的JavaScript),我正在通過Java慢慢地,有條不紊地工作:Herbert Schildt的初學者指南。 這是一本令人難以置信的書。

首先,我終於理解了或多或少的位運算符(我在ActionScript 2.0中首次遇到的),並且它們比某些和的其他方法更有效。

我的問題是,在一個包含許多計算的大型程序中使用一種使用權利,例如右移,為你執行所有分區/ 2(或分區/偶數)的方法是更有效的(在這種情況下,是一個龐大的計算) RPG),或者簡單地使用標准數學運算是否更有效,因為編譯器會為您優化它?

或者,我是否完全提出了錯誤的問題?

你完全在問錯誤的問題。 你應該問的問題是“我應該保持我的代碼簡單易讀,或者使用我相信會提高其性能的技巧,即使我沒有測量它的性能。” 答案應該是顯而易見的。

按位運算符占有一席之地,特別是當您處理需要將大量數據打包到小空間的二進制文件格式時。 並且知道如何屏蔽一個字節的高位以便不會意外地進行符號擴展(打印出這兩個變量以查看我的意思)是絕對關鍵的:

byte b = (byte)0xDC;
int  i = b & 0xFF;

但是不要去尋找使用這些操作符的地方,尤其是替換除以2之類的簡單任務。

只有在您真正需要這樣做時才能進行這樣的優化。 如果你只是認為代碼運行得更快,那可能就不值得了。

通常情況下,編譯器可能比您想象的更聰明,並為您進行優化,有時可能會有一些警告只能讓您更深入地解決問題。 最重要的是(也許是反對這樣做的最大原因),如果它使您的代碼難以閱讀/理解未來的開發人員(或您自己),您可能只會在將來添加更多反優化工作圍繞原始代碼。

通常編譯器會進行大量優化。 此外,您需要在優化之前調查您的瓶頸。 優化不是瓶頸的事情只會導致更多的線程更快地達到真正的瓶頸。 查找約束理論。

出於學習目的,您可以跳過以這種方式優化代碼。 它需要一些經驗,否則你可能會遇到調試代碼的問題(我主要是指“這件事情到底在做什么?”綜合症)現在編譯器非常聰明,可以優化輸出代碼並以正確的方式處理已知模式。 除非您真的需要保存每毫秒或cpu周期,否則請專注於保持代碼清潔。

后者。 也就是說,首先以最清晰的方式編寫代碼,這很可能需要標准的數學運算。 讓編譯器處理剩下的事情。

Java,因為它在VM上運行,具有其他有趣的內置優化功能:例如,當您的程序運行時,VM可以查看哪些代碼分支最常執行並使這些分支更有效。

編寫程序后,使用分析工具來測量哪些特定方法很慢。 一旦你知道了,那么你就會知道要優化什么樣的代碼。 例如,您可能會發現從文件中讀取配置是您做的最慢的事情,您可以尋找更快的方法。 我的預感是,你不可能通過使用按位運算符而不是普通算術來找到任何性能優勢。

祝你好運!

首先,我終於理解了或多或少的位運算符(我在ActionScript 2.0中首次遇到的),並且它們比某些和的其他方法更有效。

這不是錯的。 按位運算有更多的應用程序可以進行分區或乘法。
您可以有效地使用位掩碼作為標志,打包值,以緊湊的方式模擬訪問權限,在密碼學等中。
看到這個帖子。 你應該搜索更多的應用程序,而不僅僅是閱讀一章,說明一個班次是如何相似的,並且(可能)比一個部門更快(不一定是編譯器轉換為移位)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM