中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java位運算的技巧有哪些

發布時間:2022-05-21 15:49:50 來源:億速云 閱讀:134 作者:iii 欄目:大數據

這篇“java位運算的技巧有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“java位運算的技巧有哪些”文章吧。

什么是位操作

我們都知道數據在計算機存儲的形式是二進制數據,位操作就是一種在二進制層面操作數據的方法,位操作直接操作0,1構成的二進制數據。

基本的位操作

基本的位操作有六種,分別是 ** 與 或 非 異或 左移 右移 **

符號描述運算規則
&兩個位都為1時,結果才為1
兩個位都為0時,結果才為0
^異或兩個位相同時,結果為1,不相同為0
~取反0變1,1變0
<<左移各二進位全部左移若干位,高位丟棄,低位補0
>>右移各二進位全部左移若干位,高位丟棄,高位補符號位,或者補零,根據不同編譯器
  • ** 首先,必須明確位操作只能對整數進行操作 **

  • 在jdk中,java右移是進行算術右移操作

  • ** 位操作的優先級很低,所以最好用括號 **

java位運算的技巧有哪些

上述代碼的輸出結果:

java位運算的技巧有哪些

下面我們就分析一下為什么會輸出這個結果:

  • 首先對于13,我們寫出他的二進制:0000 1101

  • 右移兩位: 0000 0011,由于jdk中的右移是算術右移,所以高位補00,結果為3

  • 對于-13,二進制代碼: 1111 0011

  • 右移兩位,高位補符號位,1111 1100,結果是-4

位操作的常用技巧

位操作經常用于一些小操作,由于他只能操作整形數,所以用途有限,但是一些常用的小技巧是非常值得掌握的,判斷奇偶,交換兩數,交換符號,求絕對值等。下面我們就將一一介紹。

判斷奇偶

奇偶的區別體現在二進制上,就是末尾是0,1 顯然當末尾為0時,是偶數,當末尾為1是最后一位奇數。所以判斷奇偶的方法是:

java位運算的技巧有哪些

一個小的測試程序:

java位運算的技巧有哪些

上面這個程序將會輸出所有1000以內的偶數

交換兩數

利用位操作交換兩個數的好處是不用第三個temp變量(局限是只能交換整數變量)

java位運算的技巧有哪些

分析一下交換是怎么產生的:
首先 a^=b 即a=(a^b);
b^=a 即b=b(ab),由于運算滿足交換律,b(ab)=bb^a。一個數和自己異或肯定是0,因為自己肯定是等于自己的啦,那么一個數和0異或的話,1和0異或還是1,0和0異或還是0,所以顯然一個數和0異或之后當然還是自己本身。所以此時,b被賦值為a。
最后一步,a^=b 就是a=ab,由于前面二步可知a=(ab),b=a,所以a=ab即a=(ab)^a。故a會被賦上b的值。

變換符號

變換符號顯然很簡單,根據類似補碼,取反加一就可以了。

java位運算的技巧有哪些

求絕對值

求絕對值就是在變換符號的基礎上實現的,我們只要先判斷是否為負數,若是負數,就變換符號,不是,就直接返回。
判斷正負可以直接判斷其符號位,右移31位,取到符號位,判斷正負

java位運算的技巧有哪些

對于任何數,與0異或都會保持不變,與-1即0xFFFFFFFF異或就相當于取反。因此,a與i異或后再減i(因為i為0或-1,所以減i即是要么加0要么加1)也可以得到絕對值。所以可以對上面代碼優化下:

java位運算的技巧有哪些

位操作的應用

常見的算法題,位操作實現A+B的操作是常見的算法題。

java位運算的技巧有哪些

上述代碼就實現了不用+操作符,利用位操作實現兩個數的相加操作。
現在我們來講解位操作實現兩個數相加的原理
首先,十進制中,我們知道,7+8,不進位和是5,進位是1,然后我們可以根據不進位和和進位5+1*10算出最后的結果15。
類似二進制也可以采取這種方法
比如
a = 3,b = 6
a : 0011
b : 0110
不進位和: 0101   也就是5
進位:0010  也就是2
所以a+b變成5 + (2<<1)
5    0101
2<<1   0100
不進位和 0001  = 1
進位          0100  = 4
因此 a + b就變成了1 + 4 << 1
然后有
1    0001
4<<1   1000
不進位和 1001  = 9
進位          0000  = 0
當時進位為0時,不進位和為9即a + b之和。

可以發現上述是一個遞歸的過程,所以也就不難寫出代碼了。求兩個數的不進位和實際上就是將兩個數異或操作即可。

以上就是關于“java位運算的技巧有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜良县| 肥东县| 张家界市| 东方市| 清水县| 剑阁县| 彭泽县| 五常市| 靖边县| 云浮市| 前郭尔| 乳山市| 盖州市| 双流县| 武乡县| 仙游县| 昂仁县| 天水市| 武城县| 满洲里市| 日土县| 灵武市| 江华| 合江县| 团风县| 红原县| 民和| 常山县| 寻甸| 扬州市| 全南县| 牙克石市| 中方县| 扶绥县| 堆龙德庆县| 界首市| 武强县| 四子王旗| 上饶县| 华蓥市| 商河县|