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

Java 無符號右移與右移運算符的使用介紹

 更新時間:2020年06月23日 10:24:26   作者:小白集團  
這篇文章主要介紹了Java 無符號右移與右移運算符的使用介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

Java 無符號右移介紹

 最近學習Java,看到>>>運算符不太了解,也百度查了查,解釋得不是很清晰。那么下面講解我對>>>運算符的認識: >>>運算符:無符號右移運算符 在學習>>>無符號右移運算符前,我們先了解右移運算符>>

下表列出了位運算符的基本運算,假設整數(shù)變量A的值為60和變量B的值為13:

操作符 描述 例子
如果相對應位都是1,則結(jié)果為1,否則為0 (A&B),得到12,即0000 1100
| 如果相對應位都是0,則結(jié)果為0,否則為1 (A | B)得到61,即 0011 1101
^ 如果相對應位值相同,則結(jié)果為0,否則為1 (A ^ B)得到49,即 0011 0001
按位取反運算符翻轉(zhuǎn)操作數(shù)的每一位,即0變成1,1變成0。 (〜A)得到-61,即1100 0011
<< 按位左移運算符。左操作數(shù)按位左移右操作數(shù)指定的位數(shù)。 A << 2得到240,即 1111 0000
>> 按位右移運算符。左操作數(shù)按位右移右操作數(shù)指定的位數(shù)。 A >> 2得到15即 1111
>>> 按位右移補零操作符。左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移,移動得到的空位以零填充。 A>>>2得到15即0000 1111

右移運算符

>>右移運算符:正數(shù)高位補0,負數(shù)高位補1

看一個例子:

public static void main(String[] args) {
    /**
     * 10的二進制:1010
     * 因為是正數(shù),所以計算機高位的0不會輸出
     * 負數(shù)會輸出32位bit
     */
    System.out.println(Integer.toBinaryString(10 >> 2));
    System.out.println(Integer.toBinaryString(-10));
    System.out.println(Integer.toBinaryString(-10 >> 2));
  }

輸出:


計算機計算數(shù)據(jù)以補碼的方式進行計算
正數(shù)原碼、反碼、補碼不變
負數(shù)(-10):以8bit(位)表示
原碼----> 1000 1010
反碼----> 1111 0101(符號位不變,其他位取反)
補碼----> 1111 0110(反碼基礎上 + 1)
所以會 -10 會輸出:1111…0110
-10 >> 2 :1111…1101(高位補1)
10 >> 2:0000…0010

無符號右移運算符

>>> 無符號右移運算符與 >> 右移運算符的正數(shù)相同,只不過關鍵在于負數(shù)的不同,>>>運算符右移:**負數(shù)高位補 0 ,其它位不變**

看一個例子:

public static void main(String[] args) {
    System.out.println(Integer.toBinaryString(10 >>> 2));
    System.out.println(Integer.toBinaryString(-10));
    System.out.println(Integer.toBinaryString(-10 >>> 2));
  }

輸出:(注意和以上例子比較)


解釋


總結(jié):
>>> 和 >> 的區(qū)別在于:

  • >>> 負數(shù)高位補 0;
  • >> 負數(shù)高位補1;

 左移運算符   <<

左移的規(guī)則只記住一點:該數(shù)對應的二進制碼補碼整體左移,丟棄最高位,0補最低位

如果移動的位數(shù)超過了該類型的最大位數(shù),那么編譯器會對移動的位數(shù)取模。如對int型移動33位,實際上只移動了33%32=1位;

當左移的運算數(shù)是int 類型時,每移動1位它的第31位(0~31)就要被移出并且丟棄;
當左移的運算數(shù)是long 類型時,每移動1位它的第63(0~63)位就要被移出并且丟棄。
當左移的運算數(shù)是byte 和short類型時,將自動把這些類型擴大為 int 型。

正數(shù)和負數(shù)的左移操作分兩種情況:

(1)左移n位(1<=n<=31)之后操作數(shù)沒有溢出

         這種情況等價于===原操作*2^n,例如60的二進制補碼是 111100=2^5+2^4+2^3+2^2=60

60左移25位之后的二進制補碼為:01111000000000000000000000000000 =(2^5+2^4+2^3+2^2)*2^25=2^30+2^29+2^28+2^27

而int類型占四個字節(jié),一共三十二位,第一位是符號位,int類型的數(shù)值范圍是(-2^31~2^31-1)所以60左移25位操作數(shù)沒有溢出,最高位還是0;

(2)左移n位(1<=n<=31)之后操作數(shù)溢出

但如果再向左移動一位的話,即60左移26位之后的二進制補碼為:

11110000000000000000000000000000 =(2^5+2^4+2^3+2^2)*2^26=2^31+2^30+2^29+2^28

此時二進制最高位是1,操作數(shù)溢出,變成負數(shù)。

60移位前二進制(補碼表示):
111100  60
-60移位前二進制(補碼表示):
11111111111111111111111111000100  -60
 
左移的規(guī)則只記住一點:丟棄最高位,0補最低位
60左移1位的二進制(補碼表示):
1111000  120
60左移25位的二進制(補碼表示):
1111000000000000000000000000000  2013265920
60左移26位的二進制(補碼表示):
11110000000000000000000000000000  -268435456
60左移30位的二進制(補碼表示):
0  0
-60左移1位的二進制(補碼表示):
11111111111111111111111110001000  -120
-60左移25位的二進制(補碼表示):
10001000000000000000000000000000  -2013265920
-60左移26位的二進制(補碼表示):
10000000000000000000000000000  268435456
-60左移32位的二進制(補碼表示):
11111111111111111111111111000100  -60

到此這篇關于Java 無符號右移與右移運算符的使用介紹的文章就介紹到這了,更多相關Java 無符號右移與右移運算符內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中常見XML解析器的使用詳解(JAXP,DOM4J,Jsoup,JsoupXPath)

    java中常見XML解析器的使用詳解(JAXP,DOM4J,Jsoup,JsoupXPath)

    為了處理和操作XML數(shù)據(jù),我們需要使用XML解析器,本文將介紹幾種常用的XML解析器,包括JAXP、DOM4J、Jsoup和JsoupXPath,需要的小伙伴可以參考一下
    2023-11-11
  • 詳解java中的6種單例寫法及優(yōu)缺點

    詳解java中的6種單例寫法及優(yōu)缺點

    在java中,單例有很多種寫法,面試時,手寫代碼環(huán)節(jié),除了寫算法題,有時候也會讓手寫單例模式,這里記錄一下單例的幾種寫法和優(yōu)缺點。需要的朋友可以參考下
    2018-11-11
  • Mybatis?Plus?中的LambdaQueryWrapper示例詳解

    Mybatis?Plus?中的LambdaQueryWrapper示例詳解

    這篇文章主要介紹了Mybatis?Plus?中的LambdaQueryWrapper,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 劍指Offer之Java算法習題精講鏈表與字符串及數(shù)組

    劍指Offer之Java算法習題精講鏈表與字符串及數(shù)組

    跟著思路走,之后從簡單題入手,反復去看,做過之后可能會忘記,之后再做一次,記不住就反復做,反復尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • Java spring AOP基礎

    Java spring AOP基礎

    本篇文章主要介紹了深入理解spring的AOP機制基礎原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11
  • 在springboot中使用p6spy方式

    在springboot中使用p6spy方式

    這篇文章主要介紹了在springboot中使用p6spy方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 關于java.lang.NumberFormatException: null的問題及解決

    關于java.lang.NumberFormatException: null的問題及解決

    這篇文章主要介紹了關于java.lang.NumberFormatException: null的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringCloud Zuul和Gateway的實例代碼(搭建方式)

    SpringCloud Zuul和Gateway的實例代碼(搭建方式)

    本文主要介紹了SpringCloudZuul和SpringCloudGateway的簡單示例,SpringCloudGateway是推薦使用的API網(wǎng)關解決方案,基于SpringFramework5和ProjectReactor構(gòu)建,具有更高的性能和吞吐量
    2025-02-02
  • Java:DocumentBuilderFactory調(diào)用XML的方法實例

    Java:DocumentBuilderFactory調(diào)用XML的方法實例

    Java:DocumentBuilderFactory調(diào)用XML的方法實例,需要的朋友可以參考一下
    2013-04-04
  • 解決線程并發(fā)redisson使用遇到的坑

    解決線程并發(fā)redisson使用遇到的坑

    這篇文章主要介紹了解決線程并發(fā)redisson使用遇到的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

高雄县| 铁岭市| 金门县| 宁陵县| 丽江市| 曲阳县| 昆明市| 秦皇岛市| 香港 | 淮滨县| 礼泉县| 百色市| 镇赉县| 武安市| 江北区| 黑河市| 平安县| 宁远县| 湖北省| 民乐县| 将乐县| 九寨沟县| 平安县| 陇南市| 喀喇沁旗| 武陟县| 土默特右旗| 界首市| 松潘县| 吉隆县| 台湾省| 西吉县| 康乐县| 汤阴县| 渑池县| 湛江市| 揭东县| 繁峙县| 海安县| 乌海市| 海淀区|