解讀JAVA中的位運算操作
1、名詞解釋
首先,位移運算僅針對整數(shù),非整數(shù)不支持位移運算。
- ①<<:左移操作符,低位補0。
- ②>>:算數(shù)右移符,高位補符號位。
- ③>>>:邏輯右移符,高位補0。
如果對byte、short類型移位,在移位運算前,它們會先被轉成int類型,且返回值也是int類型。
如果對long類型移位,則返回值也是long。
2、正負數(shù)換算
在java中最高位表示符號位,最高位0代表正數(shù),最高位1代表負數(shù)。
用byte數(shù)據(jù)類型舉例,byte占據(jù)8個二進制位:
01111111 正數(shù)(127)
11111111 負數(shù)(-1)
負數(shù)的換算方法
已知最高位為1,符號位不變,將其它位取反,然后+1即可得出對應負數(shù)。
以byte類型為例:
11111111 先取反-> 10000000 再加1-> 10000001 得出結果-> -1
10001111 先取反-> 11110000 再加1-> 11110001 得出結果-> -113
10101010 先取反-> 11010101 再加1-> 11010110 得出結果-> -86
10000001 先取反-> 11111110 再加1-> 11111111 得出結果-> -127
已知十進制負數(shù),如何算出二進制原碼
符號位不變,將剩下二進制位-1,然后取反即可得出原二進制碼。
以byte類型為例:
-1 二進制-> 10000001 再減1-> 10000000 再取反得出結果-> 11111111
-113 二進制-> 11110001 再減1-> 11110000 再取反得出結果-> 10001111
-86 二進制-> 11010110 再減1-> 11010101 再取反得出結果-> 10101010
-127 二進制-> 11111111 再減1-> 11111110 再取反得出結果-> 10000001
3、位移運算演示
因為1字節(jié)的byte進行位運算時,會被自動轉成4字節(jié)的int再進行運算,我們這里直接使用int類型進行演示,方便解讀。
- 演示壹 100<<2=400
- 演示貳 15>>2=3
- 演示叁 1325400064<<2=1006632960
- 演示肆 -1895825408>>2=-473956352
- 演示伍 -1895825408<<2=1006632960
- 演示陸 -1895825408>>>2=599785472
4、拓展
~:二進制取反運算。
- 演示 ~79=-80
&:二進制與運算
- 演示 75&(-100)=8
|:二進制或運算
- 演示 75|(-100)=-33
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java中Vector與ArrayList的區(qū)別詳解
本篇文章是對Java中Vector與ArrayList的區(qū)別進行了詳細的分析介紹,需要的朋友參考下2013-06-06Java中的System.arraycopy()淺復制方法詳解
這篇文章主要介紹了Java中的System.arraycopy()淺復制方法詳解,Java數(shù)組的復制操作可以分為深度復制和淺度復制,簡單來說深度復制,可以將對象的值和對象的內(nèi)容復制;淺復制是指對對象引用的復制,需要的朋友可以參考下2023-11-11