解讀JAVA中的位運(yùn)算操作
1、名詞解釋
首先,位移運(yùn)算僅針對(duì)整數(shù),非整數(shù)不支持位移運(yùn)算。
- ①<<:左移操作符,低位補(bǔ)0。
- ②>>:算數(shù)右移符,高位補(bǔ)符號(hào)位。
- ③>>>:邏輯右移符,高位補(bǔ)0。
如果對(duì)byte、short類型移位,在移位運(yùn)算前,它們會(huì)先被轉(zhuǎn)成int類型,且返回值也是int類型。
如果對(duì)long類型移位,則返回值也是long。
2、正負(fù)數(shù)換算
在java中最高位表示符號(hào)位,最高位0代表正數(shù),最高位1代表負(fù)數(shù)。
用byte數(shù)據(jù)類型舉例,byte占據(jù)8個(gè)二進(jìn)制位:
01111111 正數(shù)(127)
11111111 負(fù)數(shù)(-1)
負(fù)數(shù)的換算方法
已知最高位為1,符號(hào)位不變,將其它位取反,然后+1即可得出對(duì)應(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)制原碼
符號(hào)位不變,將剩下二進(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í),會(huì)被自動(dòng)轉(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)文章
SpringBoot實(shí)現(xiàn)日志鏈路追蹤的項(xiàng)目實(shí)踐
在分布式系統(tǒng)中,由于請(qǐng)求的處理過(guò)程可能會(huì)跨越多個(gè)服務(wù),因此,對(duì)請(qǐng)求的追蹤變得尤為重要,本文主要介紹了SpringBoot實(shí)現(xiàn)日志鏈路追蹤的項(xiàng)目實(shí)踐,感興趣的可以了解一下2024-03-03SpringBoot中集成Swagger2及簡(jiǎn)單實(shí)用
使用Swagger你只需要按照它的規(guī)范去定義接口及接口相關(guān)的信息,再通過(guò)Swagger衍生出來(lái)的一系列項(xiàng)目和工具,就可以做到生成各種格式的接口文檔,以及在線接口調(diào)試頁(yè)面等等,這篇文章主要介紹了SpringBoot中集成Swagger2,需要的朋友可以參考下2023-06-06Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能
這篇文章主要介紹了Java返回文件時(shí)為圖片或pdf等設(shè)置在線預(yù)覽或下載功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Java中Vector與ArrayList的區(qū)別詳解
本篇文章是對(duì)Java中Vector與ArrayList的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06Java中的System.arraycopy()淺復(fù)制方法詳解
這篇文章主要介紹了Java中的System.arraycopy()淺復(fù)制方法詳解,Java數(shù)組的復(fù)制操作可以分為深度復(fù)制和淺度復(fù)制,簡(jiǎn)單來(lái)說(shuō)深度復(fù)制,可以將對(duì)象的值和對(duì)象的內(nèi)容復(fù)制;淺復(fù)制是指對(duì)對(duì)象引用的復(fù)制,需要的朋友可以參考下2023-11-11簡(jiǎn)單了解Spring Cloud Alibaba相關(guān)知識(shí)
這篇文章主要介紹了簡(jiǎn)單了解Spring Cloud Alibaba相關(guān)知識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10