溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解Java中左移和右移問題

發(fā)布時(shí)間:2021-11-22 09:16:14 來源:億速云 閱讀:161 作者:柒染 欄目:開發(fā)技術(shù)

如何理解Java中左移和右移問題,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

 1 原碼、反碼、補(bǔ)碼

原碼:將十進(jìn)制轉(zhuǎn)化為二進(jìn)制即原碼;

反碼:正數(shù)的反碼與原碼相同,負(fù)數(shù)的反碼(除卻最高位的符號(hào)位不變)與原碼相反;

補(bǔ)碼:正數(shù)的補(bǔ)碼與原碼相同,負(fù)數(shù)的補(bǔ)碼(除卻最高位的符號(hào)位不變)與原碼的取反加一。

舉例:5 和 -5

5:

原碼:0 0000000 00000000 00000000 00000101

反碼:0 0000000 00000000 00000000 00000101

補(bǔ)碼:0 0000000 00000000 00000000 00000101

-5:

原碼:1 00000000 00000000 00000000 00000101

反碼:1 1111111 11111111 11111111 11111010

補(bǔ)碼:1 1111111 11111111 11111111 11111011

2 位移操作

我們需要知道將一個(gè)數(shù)字,在計(jì)算機(jī)中進(jìn)行移動(dòng)多少位,例如8<<1代表將8轉(zhuǎn)化為二進(jìn)制在計(jì)算機(jī)中左移1位,低位補(bǔ)零;

<<:左移:低位補(bǔ)0

>>:有符號(hào)右移:正數(shù)高位補(bǔ)0,負(fù)數(shù)高位補(bǔ)1

>>>:無符號(hào)右移,高位補(bǔ)零

為什么沒有無符號(hào)左移呢?因?yàn)樽笠频那闆r下只存在補(bǔ)零的情況。

舉例 :5 和 -5

5<<1

原碼:0 0000000 00000000 00000000 00000101

左移1位:0 0000000 00000000 00000000 00001010

即:10

-5<<1

原碼:1 00000000 00000000 00000000 00000101

補(bǔ)碼:1 1111111 11111111 11111111 11111011

左移1位:1 1111111 11111111 11111111 11110110

取其補(bǔ)碼:1 0000000 00000000 00000000 00001010

即:-10

5>>1

原碼:0 0000000 00000000 00000000 00000101

右移1位:0 0000000 00000000 00000000 00000010

即:2

-5>>1

原碼:1 00000000 00000000 00000000 00000101

補(bǔ)碼:1 1111111 11111111 11111111 11111011

右移1位:1 1111111 11111111 11111111 11111101

取其補(bǔ)碼:1 0000000 00000000 00000000 00000011

即:-3

5>>>1:與5>>1一樣,都是高位補(bǔ)0

原碼:0 0000000 00000000 00000000 00000101

右移1位:0 0000000 00000000 00000000 00000010

即:2

-5>>>1

原碼:1 00000000 00000000 00000000 00000101

補(bǔ)碼:1 1111111 11111111 11111111 11111011

右移1位:0 1111111 11111111 11111111 11111101

即:2147483645

代碼運(yùn)行截圖

如何理解Java中左移和右移問題

總結(jié):

位移操作很簡(jiǎn)單,使用補(bǔ)碼移動(dòng),補(bǔ)齊空缺位就行,除了>>:補(bǔ)與最高位一致的;其他移動(dòng)哪缺哪補(bǔ)零。

在java中無論截圖中的a定義成 byte,short,int哪一種類型,它默認(rèn)都是使用int類型(4字節(jié)32位),你使用long(8字節(jié)64位)

3 補(bǔ)充操作符

~(按位非):

逐位取反

|(按位或):

一真為真

1|0=1,

0|0=0,

1|1=1,

0|1=1

&(按位與):

兩真為真

1|0=0,

0|0=0,

1&1=1;

0&1=0

^(按位異或):

相異為真

1^1=0

1^0=1

0^1=1

0^0=0.

關(guān)于如何理解Java中左移和右移問題問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI