中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

怎么使用java移位符-創(chuàng)新互聯(lián)

這篇文章主要介紹“怎么使用java移位符”,在日常操作中,相信很多人在怎么使用java移位符問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用java移位符”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

目前創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、臺州網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

概述

java移位符主要包括3種:

>>      左移運算符              <<      有符號右移運算符              <<<      無符號右移運算符

這里我們先附上代碼運行實例,原理將在后面以解析下面代碼的方式進行講解:

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-81-1536870911

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

左移運算符

1 << 4

首先我們將1化為源碼:0000 0000 0000 0000 0000 0000 0000 0001 (因為其是int類型,所以化為二進制有32位)

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

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

左移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> (紅色被移除截斷,藍色是新補的0) 1*2^4=16

-1 << 3

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

對補碼進行操作得<font color=red>111</font> 1111 1111 1111 1111 1111 1111 1111 1<font color=blue>000</font> (紅色被移除截斷,藍色是新補的0)

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

總結(jié)

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

右移運算符

左移運算符不牽扯符號位的增補符號位,所以沒有有無符號分類

有符號右移運算符

8 >> 3

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

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

-8 >> 3

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

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

總結(jié)

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

無符號右移運算符

-8 >>> 3

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

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

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

補充

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

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

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

代碼補充

對于補充內(nèi)容的代碼不進行詳解,代碼及運算結(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); }}

運行結(jié)果:

646464303303

到此,關(guān)于“怎么使用java移位符”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

標(biāo)題名稱:怎么使用java移位符-創(chuàng)新互聯(lián)
文章URL:http://m.rwnh.cn/article2/ddseic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、手機網(wǎng)站建設(shè)Google、微信公眾號、定制開發(fā)、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
定远县| 遂昌县| 利川市| 宁强县| 融水| 芷江| 罗城| 中方县| 马龙县| 陆河县| 莱西市| 萨嘎县| 平昌县| 鄯善县| 南溪县| 天长市| 梓潼县| 抚顺市| 石景山区| 大丰市| 迭部县| 宁都县| 宁夏| 南充市| 即墨市| 榆中县| 东莞市| 昭苏县| 正蓝旗| 响水县| 南开区| 普安县| 荣成市| 基隆市| 垦利县| 绩溪县| 宾川县| 定结县| 马边| 岢岚县| 崇仁县|