小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

你真的搞懂了Java中的<<、>>、>>>運算符嘛?

 新進(jìn)小設(shè)計 2021-04-24

在搞懂<<、>>、>>>之前,我們需要先了解二進(jìn)制中的源碼、反碼、補碼...

二進(jìn)制中的原碼、反碼、補碼

有符號數(shù):

對于有符號數(shù)而言,符號的正、負(fù)機器是無法識別的,但由于“正、負(fù)”恰好是兩種截然不同的狀態(tài),如果用“0”表示“正”,用“1”表示“負(fù)”,這樣符號也被數(shù)字化了,并且規(guī)定將它放在有效數(shù)字的前面,即組成了有符號數(shù)。所以,在二進(jìn)制中使用最高位(第一位)來表示符號,最高位是0,表示正數(shù);最高位是1,表示負(fù)數(shù)。

100000000000000001111100

無符號數(shù):

無符號數(shù)是針對二進(jìn)制來講的,無符號數(shù)的表數(shù)范圍是非負(fù)數(shù)。全部二進(jìn)制均代表數(shù)值(所有位都用于表示數(shù)的大?。瑳]有符號位。即第一個"0"或"1"不表示正負(fù)

000000000000000001111100

對于有符號數(shù)而言的性質(zhì):

(1)二進(jìn)制的最高位是符號位:0表示正數(shù),1表示負(fù)數(shù)

(2)正數(shù)的原碼、反碼、補碼都一樣

(3)負(fù)數(shù)的反碼 = 它的原碼符號位不變,其他位取反(0 ->1 ; 1->0 )

(4)負(fù)數(shù)的補碼 = 它的反碼 +1

(5)0的反碼、補碼都是0

(6)在計算機運算的時候,都是以補碼的方式來運算的

有符號數(shù)運算案例

  1. 正數(shù)相加:

例如:1+1 ,在計算機中運算如下:

1的原碼為: 00000000 00000000 00000000 00000001

反碼:00000000 00000000 00000000 00000001

補碼: 00000000 00000000 00000000 00000001

兩數(shù)的補碼相加: 00000000 00000000 00000000 00000010( 轉(zhuǎn)換為10進(jìn)制) = 2

  1. 正數(shù)相減:

例如:1 - 2,在計算機中運算如下:

在計算機中減運算其實是作為加運算來操作的,所以,1-2 = 1 + ( -2 )

  • 第一步:獲取1的補碼 00000000 00000000 00000000 00000001

  • 第二步:獲取-2的補碼

-2的原碼:10000000 00000000 00000000 00000010

-2的反碼:11111111 11111111 11111111 11111101

-2的補碼: 11111111 11111111 11111111 11111110

  • 第三步:1的補碼與-2的補碼相加:

00000000 00000000 00000000 00000001

+ 11111111 11111111 11111111 11111110

= 11111111 11111111 11111111 11111111

  • 第四步:將計算結(jié)果的補碼轉(zhuǎn)換為原碼,反其道而行之即可(如果想將二進(jìn)制轉(zhuǎn)換為十進(jìn)制,必須得到二進(jìn)制的原碼)

補碼:11111111 11111111 11111111 11111111

=

反碼:11111111 11111111 11111111 11111110

=

原碼:10000000 00000000 00000000 00000001

第五步:將計算結(jié)果的二進(jìn)制原碼 轉(zhuǎn)換 為十進(jìn)制

二進(jìn)制原碼:10000000 00000000 00000000 00000001 = -1

<< 、>>、>>> 位移運算符

<< 左移運算符

左移一位

左移一位后的數(shù)值經(jīng)過計算可以發(fā)現(xiàn)剛好值位移前數(shù)值的兩倍,等價于乘2操作,在很多情況下可以當(dāng)做乘2使用,但是并不代表真正的乘2,在一些特殊情況下并不等價

左移18位

此時二進(jìn)制首位為1,此時數(shù)值為 -1058799616,同理,如果左位移20位,則值為 59768832 又變成了正數(shù)

注意:所以根據(jù)這個規(guī)則,如果任意一個十進(jìn)制的數(shù)左位移32位,右邊補位32個0,十進(jìn)制豈不是都是0了?當(dāng)然不是!??! 當(dāng)int 類型的數(shù)據(jù)進(jìn)行左移的時候,當(dāng)左移的位數(shù)大于等于32位的時候,位數(shù)會先求余數(shù),然后用該余數(shù)進(jìn)行左移,也就是說,如果真的左移32位的時候,會先進(jìn)行位數(shù)求余數(shù),即為左移32位相當(dāng)于左移0位 ,所以左移 33 的值和左移一位1 是一樣的

>> 右移運算符

100 帶符號右移

100 源碼補碼均為:00000000 00000000 00000000 01100100

右移四位: 00000000 00000000 00000000 00000110

結(jié)果為:6

-100 帶符號右移

-100原碼: 10000000 00000000 00000000 01100100

-100補碼: 保證符號位不變,其余位置取反并加1

11111111 11111111 11111111 10011100

右移4位 : 在高位補1

11111111 11111111 11111111 11111001

補碼形式的移位完成后,結(jié)果不是移位后的結(jié)果,還需要進(jìn)行變換才行。其方法如下:

保留符號位,然后按位取反: 10000000 00000000 00000000 00000110

然后加1,即為所求數(shù)的原碼: 10000000 00000000 00000000 00000111

結(jié)果為:-7

>>> 無符號右移運算符

無符號右移運算符和右移運算符是一樣的,不過無符號右移運算符在右移的時候是補0的,而右移運算符是補符號位的

100 無符號右移 4 位

100 源碼補碼均為:00000000 00000000 00000000 01100100

右移四位: 00000000 00000000 00000000 00000110

結(jié)果為:6

-100無符號右移4位

-100原碼: 10000000 00000000 00000000 01100100

-100補碼: 保證符號位不變,其余位置取反并加1

11111111 11111111 11111111 10011100

無符號右移4位 : 在高位補0

00001111 11111111 11111111 11111001

結(jié)果為:268435449

總結(jié):正數(shù)的左移與右移、無符號右移、負(fù)數(shù)的無符號右移,就是相應(yīng)的補碼移位所得,在高位補0即可

負(fù)數(shù)的右移,就是補碼高位補1,然后按位取反加1即可

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多