欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析java移位符的具體使用

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

概述

java移位符主要包括3種:

運(yùn)算符 名稱
>> 左移運(yùn)算符
<< 有符號(hào)右移運(yùn)算符
<<< 無(wú)符號(hào)右移運(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ǔ)碼來(lái)表示,主要原因是因?yàn)槭褂醚a(bǔ)碼可以使符號(hào)位和其他位統(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來(lái)補(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

我們開(kāi)始第二個(gè)輸出語(yǔ)句,這是一個(gè)負(fù)數(shù)。負(fù)數(shù)的反碼是他的源碼符號(hào)位不變,其余按位取反。補(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

對(duì)補(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é)

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

右移運(yùn)算符

左移運(yùn)算符不牽扯符號(hào)位的增補(bǔ)符號(hào)位,所以沒(méi)有有無(wú)符號(hào)分類

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

8 >> 3

根據(jù)上面流程,我這里直接就簡(jiǎn)化為
   源碼為: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ǔ)的符號(hào)位,并且以原來(lái)的符號(hào)位填補(bǔ))

-8 >> 3

根據(jù)上面流程,我這里直接就簡(jiǎn)化為
   源碼為: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ǔ)的符號(hào)位,并且以原來(lái)的符號(hào)位填補(bǔ))
轉(zhuǎn)換為源碼為:1000 0000 0000 0000 0000 0000 0000 0001 -1*2^0=-1

總結(jié)

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

無(wú)符號(hào)右移運(yùn)算符

-8 >>> 3

根據(jù)上面流程,我這里直接就簡(jiǎn)化為
   源碼為: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)?,注意黃色部分,在無(wú)符號(hào)右移運(yùn)算位中統(tǒng)一補(bǔ)0)

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

補(bǔ)充

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

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

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

代碼補(bǔ)充

對(duì)于補(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

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

相關(guān)文章

  • Mybatis三種批量插入數(shù)據(jù)的方式

    Mybatis三種批量插入數(shù)據(jù)的方式

    這篇文章主要介紹了Mybatis的三種批量插入方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-04-04
  • maven多模塊pom配置實(shí)例詳解

    maven多模塊pom配置實(shí)例詳解

    這篇文章主要介紹了maven多模塊pom配置實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • MyBatis學(xué)習(xí)筆記(二)之關(guān)聯(lián)關(guān)系

    MyBatis學(xué)習(xí)筆記(二)之關(guān)聯(lián)關(guān)系

    這篇文章主要介紹了MyBatis學(xué)習(xí)筆記(二)之關(guān)聯(lián)關(guān)系 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • 使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例

    使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例

    這篇文章主要介紹了使用Java代碼進(jìn)行因數(shù)分解和求最小公倍數(shù)的示例,都是基于最基礎(chǔ)的算法原理實(shí)現(xiàn),需要的朋友可以參考下
    2015-11-11
  • Spring Boot 2.0多數(shù)據(jù)源配置方法實(shí)例詳解

    Spring Boot 2.0多數(shù)據(jù)源配置方法實(shí)例詳解

    這篇文章主要介紹了Spring Boot 2.0多數(shù)據(jù)源配置方法實(shí)例詳解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • Java開(kāi)發(fā)微信Navicat支付完整版

    Java開(kāi)發(fā)微信Navicat支付完整版

    這篇文章主要介紹了Java開(kāi)發(fā)微信Navicat支付完整版,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java面向?qū)ο笾b類的用途與實(shí)際使用

    Java面向?qū)ο笾b類的用途與實(shí)際使用

    所謂包裝類,就是能夠直接將簡(jiǎn)單類型的變量表示為一個(gè)類,在執(zhí)行變量類型的相互轉(zhuǎn)換時(shí),我們會(huì)大量使用這些包裝類,本文我們來(lái)深入探索一下Java包裝類的相關(guān)內(nèi)容,需要的朋友可以參考下
    2022-03-03
  • SpringBoot如何統(tǒng)一清理數(shù)據(jù)

    SpringBoot如何統(tǒng)一清理數(shù)據(jù)

    這篇文章主要介紹了SpringBoot如何統(tǒng)一清理數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • springmvc如何使用POJO作為參數(shù)

    springmvc如何使用POJO作為參數(shù)

    這篇文章主要介紹了springmvc如何使用POJO作為參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 深入探究Java?@MapperScan實(shí)現(xiàn)原理

    深入探究Java?@MapperScan實(shí)現(xiàn)原理

    之前是直接在Mapper類上面添加注解@Mapper,這種方式要求每一個(gè)mapper類都需要添加此注解,麻煩。通過(guò)使用@MapperScan可以指定要掃描的Mapper類的包的路徑,這篇文章深入探究Java?@MapperScan的實(shí)現(xiàn)原理
    2023-01-01

最新評(píng)論