最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的位運算符號解讀(&、|、^、~、<<、>>、>>>)

 更新時間:2023年08月21日 16:36:42   作者:羽觴醉月11  
這篇文章主要介紹了Java中的位運算符號(&、|、^、~、<<、>>、>>>),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

1. 位運算符號概覽

符號描述運算規(guī)則
&兩個位都為1時,結果才為1
|兩個位都為0時,結果才為0
^異或兩個位相同為0,不同為1
~取反所有位置0變1,1變0
<<左移各二進位全部左移若干位,高位丟棄,低位補0
>>帶符號右移各二進位全部右移若干位,低位丟棄,高位補為符號位
>>>無符號右移各二進位全部右移若干位,低位丟棄,高位補0

還有兩個符號,并不是位運算符,但是容易與位運算符混淆,后面將與其相似的位運算符進行一并講解:

符號描述運算規(guī)則
&&邏輯與左右表達式均為true時,運算最終結果才為true
||邏輯非左右表達式只要有一個為true,運算最終結果就為true

2. 一個工具

下面的函數(shù)可以幫助我們打印Java中int整型的在底層的32位信息,后面可以使用該工具對程序進行調試:

public static void print(int num) {
    for (int i = 31; i >= 0; i--) {
        System.out.print((num & (1 << i)) == 0 ? "0" : "1");
    }
    System.out.println();
}
// print(1);  -->  00000000000000000000000000000001
// print(-1); -->  11111111111111111111111111111111
// print(Integer.MAX_VALUE);  -->  01111111111111111111111111111111
// print(Integer.MAX_VALUE);  -->  10000000000000000000000000000000

下面開始對每個符號進行介紹。

3. 按位與(&)、邏輯與(&&)

**按位與(&)**的具體運算規(guī)則為:

1 & 1 = 1        1 & 0 = 0        0 & 1 = 0        0 & 0 = 0

// 舉例:
print(123);		// 00000000000000000000000001111011
print(321);		// 00000000000000000000000101000001
print(a & b);	// 00000000000000000000000001000001
// 任何數(shù)與0相與都等于0
// 任何數(shù)與自己相與都等于自己

在Java中,(&)不僅可以作為位運算符號,同樣也可以作為邏輯與符號,

要注意:(&&)并不是位運算符號,不可以參與位運算!

**邏輯與(&)、邏輯與(&&)**的具體運算規(guī)則為:

true & true = true			true & false = false		
false & true = false		false & false = false	
true && true = true			true && false = false		
false && true = false		false && false = false

兩者的區(qū)別在于:

**邏輯與(&)**在運算時,不論(&)前面的表達式的結果是否為false,(&)后面的表達式都會執(zhí)行運算;

而**邏輯與(&&)**在運算時,如果(&&)前面的表達式的結果為false,則(&&)后面的表達式就不會執(zhí)行運算。

4.按位或(|)、邏輯或(||)

**按位與(&)**的具體運算規(guī)則為:

1 | 1 = 1        1 | 0 = 1        0 | 1 = 1        0 | 0 = 0        

// 舉例:
print(123);		// 00000000000000000000000001111011
print(321);		// 00000000000000000000000101000001
print(a | b);	// 00000000000000000000000101111011
// 任何數(shù)與0相或都等于自身
// 任何數(shù)與自己相或都等于自己

在Java中,(|)不僅可以作為位運算符號,同樣也可以作為邏輯與符號。

要注意:(||)并不是位運算符號,不可以參與位運算!

**邏輯或(|)、邏輯或(||)**的具體運算規(guī)則為:

true | true = true			true | false = true		
false | true = true			false | false = false	
true || true = true			true || false = true		
false || true = true		false || false = false

兩者的區(qū)別在于:

**邏輯或(|)**在運算時,不論(|)前面的表達式的結果是否為true,(|)后面的表達式都會執(zhí)行運算;

而**邏輯或(||)**在運算時,如果(||)前面的表達式的結果為true,則(||)后面的表達式就不會執(zhí)行運算。

5. 異或(^)

**異或(^)**的具體運算規(guī)則為:

1 ^ 1 = 0        1 ^ 0 = 1        0 ^ 1 = 1        0 ^ 0 = 0    
// 即相同為0,不同為1

// 舉例:
print(123);		// 00000000000000000000000001111011
print(321);		// 00000000000000000000000101000001
print(a ^ b);	// 00000000000000000000000100111010
// 任何數(shù)與0異或都等于自身
// 任何數(shù)與自己異或都為0

6. 取反(~)

**取反(~)**的具體運算規(guī)則為:

~1 = 0        ~0 = 1

// 舉例:
print(123);		// 00000000000000000000000001111011
print(~a);		// 11111111111111111111111110000100
// 符號位也取反

**取反(~)**可以用來求相反數(shù):

// 一個32整數(shù),取反再+1,就是該數(shù)的相反數(shù),效果等同于加負號(-)
int a = 123;
System.out.println(a);		// 123
System.out.println(~a+1);	// -123

說明:

由于Java中int類型的整數(shù)范圍為 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 −231∼231−1,負數(shù)的個數(shù)比正數(shù)多一個,這樣就導致,所有的正數(shù)都有相應的負的相反數(shù),但是并不是所有的負數(shù)都有正的相反數(shù):

a = Integer.MIN_VALUE;
System.out.println(a);		// -2147483648
print(a);					// 10000000000000000000000000000000
System.out.println(~a+1);	// -2147483648
print(~a + 1);				// 10000000000000000000000000000000
// Java中int整數(shù)最小值的相反數(shù)還是其自身
// 如果一定需要對int整數(shù)最小值求相反數(shù),請將int類型換為long類型

7. 左移(<<)

左移表示的是某數(shù)的各二進位全部左移若干位,高位丟棄,低位補0

// 舉例:
print(123);			// 00000000000000000000000001111011
print(123 << 1);	// 00000000000000000000000011110110	
// 整體左移1位,高位丟棄,低位補0

應用:

// 左移1位相當于在原數(shù)的基礎上乘以2
System.out.println(123);	// 123
System.out.println(123<<1);	// 246
// 左移2位相當于在原數(shù)的基礎上乘以4
System.out.println(2);		// 2
System.out.println(2<<2);	// 8
// 左移3位、4位...以此類推

8. 帶符號右移(>>)、無符號右移(>>>)

**帶符號右移(>>)**指的是各二進位全部右移若干位,低位丟棄,高位補為符號位

**無符號右移(>>>)**指的是各二進位全部右移若干位,低位丟棄,高位補0

int a = 123;	
print(a);		// 00000000000000000000000001111011
print(a>>2);	// 00000000000000000000000000011110
print(a>>>2);	// 00000000000000000000000000011110
int b = -123;
print(b);		// 11111111111111111111111110000101
print(b>>2);	// 11111111111111111111111111100001
print(b>>>2);	// 00111111111111111111111111100001
// 區(qū)別就在于:一個高位用符號位補,一個高位用0補

Java中沒有(<<<)符號!??!

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Nacos配置中心命名空間與組的用法解讀

    Nacos配置中心命名空間與組的用法解讀

    文章介紹了如何將配置文件拆分并放在Nacos配置中心中,包括創(chuàng)建命名空間和組、配置數(shù)據(jù)源、MyBatis和Spring的配置,以及如何通過bootstrap.properties文件從Nacos中引入多個配置文件,測試發(fā)現(xiàn)項目能正常運行,并且切換環(huán)境只需修改組名
    2026-03-03
  • JavaWeb評論功能實現(xiàn)步驟以及代碼實例

    JavaWeb評論功能實現(xiàn)步驟以及代碼實例

    項目初始版本上線,有時間寫點東西記錄一下項目中的心得體會,通過這個項目學習了很多,要寫下來的有很多,先從評論功能開始吧,下面這篇文章主要給大家介紹了關于JavaWeb評論功能實現(xiàn)步驟以及代碼的相關資料,需要的朋友可以參考下
    2023-01-01
  • 淺談Maven 項目中依賴的搜索順序

    淺談Maven 項目中依賴的搜索順序

    這篇文章主要介紹了淺談Maven 項目中依賴的搜索順序,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • Java 線程池詳解

    Java 線程池詳解

    本文給大家總結了java中的線程池的相關問題,非常的詳細也很實用,有需要的小伙伴可以參考下。
    2016-03-03
  • SpringBoot中通過AOP整合日志文件的實現(xiàn)

    SpringBoot中通過AOP整合日志文件的實現(xiàn)

    本文主要介紹了SpringBoot中通過AOP整合日志文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • mybatis-plus在yml中配置詳解

    mybatis-plus在yml中配置詳解

    本文主要介紹了mybatis-plus在yml中配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • springboot整合 beatlsql的實例代碼

    springboot整合 beatlsql的實例代碼

    這篇文章主要介紹了springboot整合 beatlsql的實例代碼,BeetSql是一個全功能DAO工具,同時具有hibernate 優(yōu)點 & Mybatis優(yōu)點功能,有興趣的可以了解一下
    2017-05-05
  • Java并發(fā)LinkedBlockingQueue源碼分析

    Java并發(fā)LinkedBlockingQueue源碼分析

    這篇文章主要為大家介紹了Java并發(fā)LinkedBlockingQueue源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • JDK 7 新特性小結實例代碼解析

    JDK 7 新特性小結實例代碼解析

    這篇文章通過實例代碼給大家介紹了JDK 7 新特性小結篇,感興趣的朋友一起看看吧
    2018-03-03
  • Java數(shù)據(jù)封裝樹形結構代碼實例

    Java數(shù)據(jù)封裝樹形結構代碼實例

    這篇文章主要介紹了Java數(shù)據(jù)封裝樹形結構代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01

最新評論

北安市| 梧州市| 武邑县| 湘西| 高邮市| 库伦旗| 台州市| 南华县| 米易县| 宕昌县| 西宁市| 贺州市| 桑日县| 洪泽县| 东至县| 班戈县| 外汇| 阿克苏市| 叶城县| 扎兰屯市| 宝兴县| 香河县| 呼伦贝尔市| 会泽县| 遂平县| 泾川县| 靖宇县| 卢氏县| 普定县| 潮安县| 安西县| 车致| 始兴县| 潞城市| 武胜县| 景宁| 武穴市| 仁怀市| 临高县| 安岳县| 沂水县|