Java中的位運(yùn)算符、移位運(yùn)算詳細(xì)介紹
一.位運(yùn)算
Java中有4個(gè)位運(yùn)算,它們的運(yùn)算規(guī)則如下:
(1)按位與 (&) :兩位全為1,結(jié)果為1,否則為0;
(2)按位或 (|) :兩位有一個(gè)為1,結(jié)果為1,否則為0;
(3)按位取反(~):0 變 1, 1變0;
(4)按位異或(^):兩位,如果相同,結(jié)果為0;如果不同,結(jié)果為1;
注意:
(1)位運(yùn)算中的 符號(hào)位(最高位)也跟著變;
(2)位運(yùn)算符與邏輯運(yùn)算符(邏輯與&&、邏輯或||、邏輯非! )有點(diǎn)相似。但是,邏輯運(yùn)算符只能操作boolean變量
(也就是左右兩邊的值都是boolean值);
二.位運(yùn)算應(yīng)用
(1) ~5 = ?
a) 5的補(bǔ)碼為:
00000000 00000000 00000000 00000101
b) 5的按位取反(~)為:
11111111 11111111 11111111 11111010
注意:因?yàn)楦呶粩?shù)是1(負(fù)數(shù)),所以要將該補(bǔ)碼轉(zhuǎn)換為原碼;如果高位數(shù)是0(正數(shù))的話, 就不用將補(bǔ)碼轉(zhuǎn)為原碼,因?yàn)檎龜?shù)的原碼、反碼、補(bǔ)碼都一樣。
c) 將該負(fù)數(shù)的補(bǔ)碼轉(zhuǎn)為反碼:
11111111 11111111 11111111 11111001
d) 將該負(fù)數(shù)的反碼轉(zhuǎn)為原碼:
10000000 00000000 00000000 00000110
e) 將二進(jìn)制原碼 轉(zhuǎn)換為 十進(jìn)制:
10000000 00000000 00000000 00000110 = 0 * 2^0 + 1 * 2^1 + 1 * 2^2 = 0+2+4 = -6 (最高位為1,所以為負(fù)數(shù))
三. 移位運(yùn)算:
Java中有3個(gè)移位運(yùn)算符。
(1) 算術(shù)右移 (>>): 低位溢出,符號(hào)位不變,并用符號(hào)位補(bǔ)溢出的高位;
例如:a >> b :a是要移動(dòng)的數(shù),b是要移動(dòng)的位數(shù),下面同理;
(2) 算術(shù)左移(<< ): 符號(hào)位不變,低位補(bǔ)0;
(3) 邏輯右移(>>>): 低位溢出,高位補(bǔ)0;注意:邏輯右移(>>>)中的 符號(hào)位(最高位)也跟著變;
四. 注意點(diǎn):
位運(yùn)算與移位運(yùn)算,都是使用的二進(jìn)制的補(bǔ)碼,進(jìn)行操作的,切忌!
相關(guān)文章
java中instanceof 關(guān)鍵字作用和實(shí)際用途詳解
這篇文章主要介紹了java中instanceof 關(guān)鍵字作用和實(shí)際用途,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04
基于SpringBoot實(shí)現(xiàn)HTTP請(qǐng)求簽名驗(yàn)證機(jī)制
在分布式系統(tǒng)交互中,API接口的安全性至關(guān)重要,本文將深入解析基于Spring Boot實(shí)現(xiàn)的HTTP請(qǐng)求簽名驗(yàn)證機(jī)制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
Spingboot?JPA?CriteriaBuilder?如何獲取指定字段
這篇文章?主要介紹了Spingboot?JPA?CriteriaBuilder?如何獲取指定字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Springboot2.x+ShardingSphere實(shí)現(xiàn)分庫(kù)分表的示例代碼
這篇文章主要介紹了Springboot2.x+ShardingSphere實(shí)現(xiàn)分庫(kù)分表的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

