java 手動實現一個 int 型數求絕對值函數

在java的數字運算中,我們一般會去考慮的運算的效率問題,所以儘可能的使用位移運算,因爲位移運算效率高。

下面分享一個就int型數絕對值的代碼,其他的可以類似借鑑這個。先上代碼:

		public int getAbsolute(int para){
		            return para*(1-((para>>>31)<<1));
		        }

沒錯,就這麼一點。
具體原理:
: int 型的數是採用4個字節存儲的,即32位,第一位,用作符號位,接下來31位來表示數字部分。如果第一位爲0,就是正數,如果第一位爲1,就是負數。
所以我們使用 無符號右移 >>> 直接得到符號位的值,然後再左移1位, 如果是0,那麼1-0=1,乘以本身,爲正; 如果符號爲1,那麼左移後就是2,1-2=-1,與原來負數想乘,又變爲正了。

以上爲自己的個人見解,歡迎大神給出高級的。

但自己有個疑問:

爲什麼 (para<<1)>>>1 這樣不行?先左移,把前面符號位給清除,然後再無符號位右移一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章