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

淺析java移位符的具體使用

 更新時(shí)間:2019年07月22日 10:03:00   作者:CodeAres  
這篇文章主要介紹了淺析java移位符的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概述

java移位符主要包括3種:

運(yùn)算符 名稱
>> 左移運(yùn)算符
<< 有符號右移運(yùn)算符
<<< 無符號右移運(yùn)算符

這里我們先附上代碼運(yùn)行實(shí)例,原理將在后面以解析下面代碼的方式進(jìn)行講解:

public class BitOperatorTest {
 public static void main(String[] args){
  System.out.println(1 << 4);
  System.out.println(-1 << 3);
  System.out.println(8 >> 3);
  System.out.println(-8 >> 3);
  System.out.println(-8 >>> 3);
 }
}

結(jié)果如下:

16
-8
1
-1
536870911

首先我們需要清楚在計(jì)算機(jī)系統(tǒng)中,數(shù)值一般用補(bǔ)碼來表示,主要原因是因?yàn)槭褂醚a(bǔ)碼可以使符號位和其他位統(tǒng)一處理,我們需要將上面的數(shù)值都轉(zhuǎn)化為補(bǔ)碼。

左移運(yùn)算符

1 << 4

首先我們將1化為源碼:0000 0000 0000 0000 0000 0000 0000 0001 (因?yàn)槠涫莍nt類型,所以化為二進(jìn)制有32位) 

正數(shù)的補(bǔ)碼和反碼等于源碼的本身。所以補(bǔ)碼也為上述二進(jìn)制代碼。

左移運(yùn)算符是將操作數(shù)的二進(jìn)制碼整理左移指定位數(shù),左移后右面空出的位用0來補(bǔ)充。

左移4位 0000 0000 0000 0000 0000 0000 0000 0001 1*2^0=1 

<font color=red>0000</font> 0000 0000 0000 0000 0000 0000 0001 <font color=blue>0000</font> (紅色被移除截?cái)啵{(lán)色是新補(bǔ)的0) 1*2^4=16

-1 << 3

我們開始第二個(gè)輸出語句,這是一個(gè)負(fù)數(shù)。負(fù)數(shù)的反碼是他的源碼符號位不變,其余按位取反。補(bǔ)碼是他的反碼加一。
所以我們可以得到-1的源碼為1000 0000 0000 0000 0000 0000 0000 0001 -1*2^0=-1
          反碼為1111 1111 1111 1111 1111 1111 1111 1110
          補(bǔ)碼為1111 1111 1111 1111 1111 1111 1111 1111

對補(bǔ)碼進(jìn)行操作得<font color=red>111</font> 1111 1111 1111 1111 1111 1111 1111 1<font color=blue>000</font> (紅色被移除截?cái)?,藍(lán)色是新補(bǔ)的0)

將結(jié)果數(shù)轉(zhuǎn)化為源碼得1000 0000 0000 0000 0000 0000 0000 1000 -1*2^3=-8

總結(jié)

所以通過上面對左移運(yùn)算符的簡單使用不難發(fā)現(xiàn),我們可以將其簡便理解為移動(dòng)幾位,就是為操作數(shù)乘以2的幾次方。

右移運(yùn)算符

左移運(yùn)算符不牽扯符號位的增補(bǔ)符號位,所以沒有有無符號分類

有符號右移運(yùn)算符

8 >> 3

根據(jù)上面流程,我這里直接就簡化為
   源碼為:0000 0000 0000 0000 0000 0000 0000 1000 1*2^3=8
   反碼為:0000 0000 0000 0000 0000 0000 0000 1000
   補(bǔ)碼為:0000 0000 0000 0000 0000 0000 0000 1000

運(yùn)算后結(jié)果:<font color=blue>000</font>0 0000 0000 0000 0000 0000 0000 0001 <font color=red>000</font> 1*2^0=1(紅色被移除截?cái)?,藍(lán)色是新補(bǔ)的符號位,并且以原來的符號位填補(bǔ))

-8 >> 3

根據(jù)上面流程,我這里直接就簡化為
   源碼為:1000 0000 0000 0000 0000 0000 0000 1000 -1*2^3=8
   反碼為:1111 1111 1111 1111 1111 1111 1111 0111
   補(bǔ)碼為:1111 1111 1111 1111 1111 1111 1111 1000

運(yùn)算后結(jié)果:<font color=blue>111</font>1 1111 1111 1111 1111 1111 1111 1111 <font color=red>000</font> (紅色被移除截?cái)?,藍(lán)色是新補(bǔ)的符號位,并且以原來的符號位填補(bǔ))
轉(zhuǎn)換為源碼為:1000 0000 0000 0000 0000 0000 0000 0001 -1*2^0=-1

總結(jié)

同左移運(yùn)算符一樣,總結(jié)規(guī)律后可得出,右移運(yùn)算符移動(dòng)幾位則是對操作數(shù)除以2的多少次方。

無符號右移運(yùn)算符

-8 >>> 3

根據(jù)上面流程,我這里直接就簡化為
   源碼為:1000 0000 0000 0000 0000 0000 0000 1000 -1*2^3=8
   反碼為:1111 1111 1111 1111 1111 1111 1111 0111
   補(bǔ)碼為:1111 1111 1111 1111 1111 1111 1111 1000

運(yùn)算后結(jié)果:<font color=yellow>000</font>1 1111 1111 1111 1111 1111 1111 1111 <font color=red>000</font> (紅色被移除截?cái)?,注意黃色部分,在無符號右移運(yùn)算位中統(tǒng)一補(bǔ)0)

此時(shí)數(shù)值將會(huì)非常大,所以得到程序中的結(jié)果。

補(bǔ)充

如果操作類型低于int類型,比如byte,char等,先將其轉(zhuǎn)化為int類型在進(jìn)行移位。 

對于int類型的移位,如果移動(dòng)位數(shù)超過32位,則讓位數(shù)對32取余,然后進(jìn)行運(yùn)行,即a>>33 == a>>1 a>>32 ==a 

同樣如果對于long類型的移位,移動(dòng)位數(shù)超過64,則也需要對移動(dòng)位數(shù)進(jìn)行處理。

代碼補(bǔ)充

對于補(bǔ)充內(nèi)容的代碼不進(jìn)行詳解,代碼及運(yùn)算結(jié)果如下,基本流程與上面類似,

代碼:

public class BitOperatorTest {
 public static void main(String[] args){
  System.out.println((char)4 << 4);
  System.out.println(4 << 4);
  System.out.println(4 << 36);
  System.out.println((long)1214 >> 66);
  System.out.println((long)1214 >> 2);
 }
}

運(yùn)行結(jié)果:

64
64
64
303
303

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JVM代碼運(yùn)行邏輯解讀

    JVM代碼運(yùn)行邏輯解讀

    這篇文章主要介紹了JVM代碼運(yùn)行邏輯,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    一文詳細(xì)講解Java的父子繼承、方法的重寫與super關(guān)鍵字

    Java中繼承是通過extends關(guān)鍵字實(shí)現(xiàn),幫助減少代碼重復(fù),提高復(fù)用性,子類繼承父類的屬性和方法,但私有成員除外,方法重寫(override)使子類改造父類方法以適應(yīng)新功能,這篇文章主要介紹了Java的父子繼承、方法的重寫與super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • Java通過apache poi生成excel實(shí)例代碼

    Java通過apache poi生成excel實(shí)例代碼

    本篇文章主要介紹了Java通過apache poi生成excel實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解Java并發(fā)編程之原子類

    詳解Java并發(fā)編程之原子類

    這篇文章主要為大家介紹了Java并發(fā)編程之原子類介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 利用Maven入手Spring Boot第一個(gè)程序詳解

    利用Maven入手Spring Boot第一個(gè)程序詳解

    這篇文章主要給大家介紹了關(guān)于如何利用Maven入手Spring Boot第一個(gè)程序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02
  • Scala中如何中斷循環(huán)詳解

    Scala中如何中斷循環(huán)詳解

    在Scala中,可以使用break和continue語句來中斷循環(huán)。break語句可以在滿足某個(gè)條件時(shí)中斷循環(huán),而continue語句可以在滿足某個(gè)條件時(shí)跳過當(dāng)前循環(huán)迭代,直接執(zhí)行下一次迭代
    2023-04-04
  • Spring Boot實(shí)戰(zhàn)之發(fā)送郵件示例代碼

    Spring Boot實(shí)戰(zhàn)之發(fā)送郵件示例代碼

    本篇文章主要介紹了Spring Boot實(shí)戰(zhàn)之發(fā)送郵件示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • Springboot訪問html頁面步驟解析

    Springboot訪問html頁面步驟解析

    這篇文章主要介紹了Springboot訪問html頁面過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java?多線程并發(fā)ReentrantLock

    Java?多線程并發(fā)ReentrantLock

    這篇文章主要介紹了Java?多線程并發(fā)ReentrantLock,Java?提供了?ReentrantLock?可重入鎖來提供更豐富的能力和靈活性,感興趣的小伙伴可以參考一下
    2022-06-06
  • Java?Map的compute方法舉例詳解

    Java?Map的compute方法舉例詳解

    Java中的Map是一種用于存儲(chǔ)鍵值對的數(shù)據(jù)結(jié)構(gòu),它提供了一系列的方法來操作和訪問其中的元素,下面這篇文章主要給大家介紹了關(guān)于Java?Map的compute方法舉例詳解的相關(guān)資料,需要的朋友可以參考下
    2024-06-06

最新評論

东平县| 陆河县| 无为县| 页游| 洛宁县| 浦北县| 吉隆县| 常熟市| 邹城市| 达孜县| 比如县| 宜州市| 成都市| 民勤县| 永泰县| 灌南县| 育儿| 台州市| 沙田区| 银川市| 台中市| 华容县| 奉化市| 吉林市| 高雄市| 同心县| 福州市| 湘西| 永昌县| 长汀县| 兴海县| 惠水县| 绍兴市| 思茅市| 穆棱市| 通海县| 绍兴县| 五峰| 禄丰县| 胶州市| 山西省|