【圖】用圖片告訴你Java中的位運算

前言

​ 雖然位運算在實際開發中並不經常使用,可是在各類算法中卻經常見到它們的身影.由於是直接操做二進制的,因此機器執行起來就快不少,因此儘管實際業務中不經常使用,但若是你不想只作個碼農,這個基礎仍是要掌握的;算法

講位操做以前,就必需要知道原碼、反碼、補碼spa

其中正數的 原碼=反碼=補碼

原碼、反碼、補碼

在機器的內存中,一個負數的表示是 這個負數的絕對值取原碼,再取反碼,再加一,最後出現的就是這個負數在內存中的表示的二進制數值

好比說-9在內存中的二進制碼,這裏用8位表示:code

最後-9在內存中的二進制值爲11110111blog

在二進制中,最高位爲符號位, 0表明正,1表明負

位運算

左移和右移

Java中的int類型有4字節,一個字節有8位,因此這邊用32位表示一個數內存

負數的左移和右移

這邊負數表示是在內存中表示的二進制值

右移時:最高位補符號位1開發

左移時:末尾補0rem

正數的左移和右移

右移時:最高位 補符號位0

左移時:末尾補0it

無符號右移

不管是正數仍是負數,右移 最高位一概補0

&(位與)

當相對應的位都爲1時,等於1,不然等於0

爲了方便表示,接下來所有都用8位表示一個數table

|(位或)

當相對應的位有一個爲1時,等於1,不然等於0

^(異或)

當相對應的位不一樣時,等於1,相同時等於0

~(取反)

1等於0,0等於1

總結

含義 運算符 說明
左移 << 末尾補0
右移 >> 負數:最高位補符號位1 正數:最高位補符號位0
無符號右移 >>> 不管是正數仍是負數,右移最高位一概補0
&(位與) & 當相對應的位都爲1時,等於1,不然等於0
丨(位或) 當相對應的位有一個爲1時,等於1,不然等於0
^(異或) ^ 當相對應的位 不一樣時,等於1 相同時,等於0
~(取反) ~ 1等於0,0等於1
相關文章
相關標籤/搜索