亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的位運(yùn)算符號(hào)解讀(&、|、^、~、<<、>>、>>>)

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

1. 位運(yùn)算符號(hào)概覽

符號(hào)描述運(yùn)算規(guī)則
&兩個(gè)位都為1時(shí),結(jié)果才為1
|兩個(gè)位都為0時(shí),結(jié)果才為0
^異或兩個(gè)位相同為0,不同為1
~取反所有位置0變1,1變0
<<左移各二進(jìn)位全部左移若干位,高位丟棄,低位補(bǔ)0
>>帶符號(hào)右移各二進(jìn)位全部右移若干位,低位丟棄,高位補(bǔ)為符號(hào)位
>>>無(wú)符號(hào)右移各二進(jìn)位全部右移若干位,低位丟棄,高位補(bǔ)0

還有兩個(gè)符號(hào),并不是位運(yùn)算符,但是容易與位運(yùn)算符混淆,后面將與其相似的位運(yùn)算符進(jìn)行一并講解:

符號(hào)描述運(yùn)算規(guī)則
&&邏輯與左右表達(dá)式均為true時(shí),運(yùn)算最終結(jié)果才為true
||邏輯非左右表達(dá)式只要有一個(gè)為true,運(yùn)算最終結(jié)果就為true

2. 一個(gè)工具

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

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

下面開(kāi)始對(duì)每個(gè)符號(hào)進(jìn)行介紹。

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

**按位與(&)**的具體運(yùn)算規(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中,(&)不僅可以作為位運(yùn)算符號(hào),同樣也可以作為邏輯與符號(hào),

要注意:(&&)并不是位運(yùn)算符號(hào),不可以參與位運(yùn)算!

**邏輯與(&)、邏輯與(&&)**的具體運(yùn)算規(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ū)別在于:

**邏輯與(&)**在運(yùn)算時(shí),不論(&)前面的表達(dá)式的結(jié)果是否為false,(&)后面的表達(dá)式都會(huì)執(zhí)行運(yùn)算;

而**邏輯與(&&)**在運(yùn)算時(shí),如果(&&)前面的表達(dá)式的結(jié)果為false,則(&&)后面的表達(dá)式就不會(huì)執(zhí)行運(yùn)算。

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

**按位與(&)**的具體運(yùn)算規(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中,(|)不僅可以作為位運(yùn)算符號(hào),同樣也可以作為邏輯與符號(hào)。

要注意:(||)并不是位運(yùn)算符號(hào),不可以參與位運(yùn)算!

**邏輯或(|)、邏輯或(||)**的具體運(yùn)算規(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ū)別在于:

**邏輯或(|)**在運(yùn)算時(shí),不論(|)前面的表達(dá)式的結(jié)果是否為true,(|)后面的表達(dá)式都會(huì)執(zhí)行運(yùn)算;

而**邏輯或(||)**在運(yùn)算時(shí),如果(||)前面的表達(dá)式的結(jié)果為true,則(||)后面的表達(dá)式就不會(huì)執(zhí)行運(yùn)算。

5. 異或(^)

**異或(^)**的具體運(yùn)算規(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. 取反(~)

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

~1 = 0        ~0 = 1

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

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

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

說(shuō)明:

由于Java中int類型的整數(shù)范圍為 − 2 31 ∼ 2 31 − 1 -2^{31}\sim2^{31}-1 −231∼231−1,負(fù)數(shù)的個(gè)數(shù)比正數(shù)多一個(gè),這樣就導(dǎo)致,所有的正數(shù)都有相應(yīng)的負(fù)的相反數(shù),但是并不是所有的負(fù)數(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ù)還是其自身
// 如果一定需要對(duì)int整數(shù)最小值求相反數(shù),請(qǐng)將int類型換為long類型

7. 左移(<<)

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

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

應(yīng)用:

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

8. 帶符號(hào)右移(>>)、無(wú)符號(hào)右移(>>>)

**帶符號(hào)右移(>>)**指的是各二進(jìn)位全部右移若干位,低位丟棄,高位補(bǔ)為符號(hào)位

**無(wú)符號(hào)右移(>>>)**指的是各二進(jìn)位全部右移若干位,低位丟棄,高位補(bǔ)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ū)別就在于:一個(gè)高位用符號(hào)位補(bǔ),一個(gè)高位用0補(bǔ)

Java中沒(méi)有(<<<)符號(hào)?。?!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入了解JVM(Java虛擬機(jī))內(nèi)存結(jié)構(gòu)

    深入了解JVM(Java虛擬機(jī))內(nèi)存結(jié)構(gòu)

    Java虛擬機(jī)(Java Virtual Machine,JVM)是Java程序的運(yùn)行環(huán)境,它是一個(gè)抽象的計(jì)算機(jī)模型,通過(guò)解釋和執(zhí)行Java字節(jié)碼來(lái)運(yùn)行Java程序,本將大家深入了解JVM(Java虛擬機(jī))內(nèi)存結(jié)構(gòu),需要的朋友可以參考下
    2023-08-08
  • SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決

    SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決

    這篇文章主要介紹了SpringBoot混合使用StringRedisTemplate和RedisTemplate的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中HashSet和LinkedHashSet詳解

    Java中HashSet和LinkedHashSet詳解

    這篇文章主要介紹了Java中HashSet和LinkedHashSet詳解,   HashSet是Set接口的子類,其內(nèi)部采用了HashMap作為數(shù)據(jù)存儲(chǔ),HashSet其實(shí)就是在操作HashMap的key,HashSet是無(wú)序存儲(chǔ)的,不能保證元素的順序;HashSet并沒(méi)有進(jìn)行同步處理,因此是線程不安全的,需要的朋友可以參考下
    2023-09-09
  • Java獲取當(dāng)前時(shí)間年月日的方法

    Java獲取當(dāng)前時(shí)間年月日的方法

    這篇文章主要為大家詳細(xì)介紹了Java獲取當(dāng)前時(shí)間年月日的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • SpringBoot通過(guò)注解下載任意對(duì)象

    SpringBoot通過(guò)注解下載任意對(duì)象

    下載功能應(yīng)該是比較常見(jiàn)的功能了,雖然一個(gè)項(xiàng)目里面可能出現(xiàn)的不多,但是基本上每個(gè)項(xiàng)目都會(huì)有,而且有些下載功能其實(shí)還是比較繁雜的,這篇文章主要介紹了SpringBoot一個(gè)注解就能幫你下載任意對(duì)象,需要的朋友可以參考下
    2023-08-08
  • Spring類型轉(zhuǎn)換 ConversionSerivce Convertor解析

    Spring類型轉(zhuǎn)換 ConversionSerivce Convertor解析

    這篇文章主要介紹了Spring類型轉(zhuǎn)換 ConversionSerivce Convertor的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • 關(guān)于springboot的接口返回值統(tǒng)一標(biāo)準(zhǔn)格式

    關(guān)于springboot的接口返回值統(tǒng)一標(biāo)準(zhǔn)格式

    這篇文章主要介紹了關(guān)于springboot的接口返回值統(tǒng)一標(biāo)準(zhǔn)格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • SpringBoot請(qǐng)求參數(shù)傳遞與接收說(shuō)明小結(jié)

    SpringBoot請(qǐng)求參數(shù)傳遞與接收說(shuō)明小結(jié)

    這篇文章主要介紹了SpringBoot請(qǐng)求參數(shù)傳遞與接收,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-12-12
  • 如何用java獲取指定日期是第幾周

    如何用java獲取指定日期是第幾周

    這篇文章主要給大家介紹了關(guān)于如何用java獲取指定日期是第幾周的相關(guān)資料,在開(kāi)始之前我們需要先了解如何獲取當(dāng)前日期所在的年份以及第幾周,在Java中可以使用Calendar類來(lái)獲取這些信息,需要的朋友可以參考下
    2023-09-09
  • SpringBoot2零基礎(chǔ)到精通之JUnit 5與指標(biāo)監(jiān)控

    SpringBoot2零基礎(chǔ)到精通之JUnit 5與指標(biāo)監(jiān)控

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開(kāi)發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)JUnit 5與指標(biāo)監(jiān)控
    2022-03-03

最新評(píng)論