解讀JAVA中的位運(yùn)算操作
1、名詞解釋
首先,位移運(yùn)算僅針對整數(shù),非整數(shù)不支持位移運(yùn)算。
- ①<<:左移操作符,低位補(bǔ)0。
- ②>>:算數(shù)右移符,高位補(bǔ)符號位。
- ③>>>:邏輯右移符,高位補(bǔ)0。
如果對byte、short類型移位,在移位運(yùn)算前,它們會先被轉(zhuǎn)成int類型,且返回值也是int類型。
如果對long類型移位,則返回值也是long。
2、正負(fù)數(shù)換算
在java中最高位表示符號位,最高位0代表正數(shù),最高位1代表負(fù)數(shù)。
用byte數(shù)據(jù)類型舉例,byte占據(jù)8個(gè)二進(jìn)制位:
01111111 正數(shù)(127)
11111111 負(fù)數(shù)(-1)
負(fù)數(shù)的換算方法
已知最高位為1,符號位不變,將其它位取反,然后+1即可得出對應(yīng)負(fù)數(shù)。
以byte類型為例:
11111111 先取反-> 10000000 再加1-> 10000001 得出結(jié)果-> -1
10001111 先取反-> 11110000 再加1-> 11110001 得出結(jié)果-> -113
10101010 先取反-> 11010101 再加1-> 11010110 得出結(jié)果-> -86
10000001 先取反-> 11111110 再加1-> 11111111 得出結(jié)果-> -127
已知十進(jìn)制負(fù)數(shù),如何算出二進(jìn)制原碼
符號位不變,將剩下二進(jìn)制位-1,然后取反即可得出原二進(jìn)制碼。
以byte類型為例:
-1 二進(jìn)制-> 10000001 再減1-> 10000000 再取反得出結(jié)果-> 11111111
-113 二進(jìn)制-> 11110001 再減1-> 11110000 再取反得出結(jié)果-> 10001111
-86 二進(jìn)制-> 11010110 再減1-> 11010101 再取反得出結(jié)果-> 10101010
-127 二進(jìn)制-> 11111111 再減1-> 11111110 再取反得出結(jié)果-> 10000001
3、位移運(yùn)算演示
因?yàn)?字節(jié)的byte進(jìn)行位運(yùn)算時(shí),會被自動轉(zhuǎn)成4字節(jié)的int再進(jìn)行運(yùn)算,我們這里直接使用int類型進(jìn)行演示,方便解讀。
- 演示壹 100<<2=400

- 演示貳 15>>2=3

- 演示叁 1325400064<<2=1006632960

- 演示肆 -1895825408>>2=-473956352

- 演示伍 -1895825408<<2=1006632960

- 演示陸 -1895825408>>>2=599785472

4、拓展
~:二進(jìn)制取反運(yùn)算。
- 演示 ~79=-80

&:二進(jìn)制與運(yùn)算
- 演示 75&(-100)=8

|:二進(jìn)制或運(yùn)算
- 演示 75|(-100)=-33

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java經(jīng)典排序算法之冒泡排序代碼實(shí)例
這篇文章主要介紹了Java經(jīng)典排序算法之冒泡排序代碼實(shí)例,相鄰兩元素進(jìn)行比較,如過左側(cè)元素大于右側(cè)元素,則進(jìn)行交換,每完成一次循環(huán)就將最大元素排在最后,下一次循環(huán)是將其它的數(shù)進(jìn)行類似操作,需要的朋友可以參考下2023-11-11
Mybatis-Plus自動填充的實(shí)現(xiàn)示例
這篇文章主要介紹了Mybatis-Plus自動填充的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
IntelliJ IDEA配置Maven阿里云鏡像加速源的全流程
國內(nèi)網(wǎng)絡(luò)訪問 Maven 中央倉庫經(jīng)常超時(shí)、依賴下載極慢或失敗,配置阿里云等國內(nèi)鏡像后,Java 項(xiàng)目依賴下載飛快,極大提升開發(fā)效率,是中國開發(fā)者必做優(yōu)化,本文就給大家介紹了IntelliJ IDEA配置Maven阿里云鏡像加速源的全流程,需要的朋友可以參考下2025-09-09
java設(shè)計(jì)模式責(zé)任鏈模式原理案例詳解
一個(gè)事件需要經(jīng)過多個(gè)對象處理是一個(gè)挺常見的場景,譬如采購審批流程,請假流程,軟件開發(fā)中的異常處理流程,web請求處理流程等各種各樣的流程,可以考慮使用責(zé)任鏈模式來實(shí)現(xiàn)2021-09-09
Java命令行參數(shù)解析工具jcommander詳解
這篇文章主要為大家介紹了Java命令行參數(shù)解析工具jcommander命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
基于Java的Socket多客戶端Client-Server聊天程序的實(shí)現(xiàn)
這篇文章主要介紹了基于Java的Socket多客戶端Client-Server聊天程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java并發(fā)編程中的ConcurrentLinkedQueue詳解
這篇文章主要介紹了Java并發(fā)編程中的ConcurrentLinkedQueue詳解,GetThread線程不會因?yàn)镃oncurrentLinkedQueue隊(duì)列為空而等待,而是直接返回null,所以當(dāng)實(shí)現(xiàn)隊(duì)列不空時(shí),等待時(shí),則需要用戶自己實(shí)現(xiàn)等待邏輯,需要的朋友可以參考下2023-12-12

