java位運算分析

Java中的<< 和 >> 和 >>> 詳細分析

<font color=#ff0000> <<表示左移移,不分正負數(shù),低位補0;</font>

注:以下數(shù)據(jù)類型默認(rèn)為byte-8位

左移時不管正負,低位補0

正數(shù):<font color=#0000ff>r = 20 << 2</font>

20的二進制補碼:0001 0100

向左移動兩位后:0101 0000

結(jié)果:r = 80

負數(shù):<font color=#0000ff>r = -20 << 2</font>

-20 的二進制原碼 :1001 0100

-20 的二進制反碼 :1110 1011

-20 的二進制補碼 :1110 1100

左移兩位后的補碼:1011 0000

反碼:1010 1111

原碼:1101 0000

結(jié)果:r = -80

<font color=#ff0000> >>表示右移,如果該數(shù)為正,則高位補0,若為負數(shù),則高位補1;</font>

注:以下數(shù)據(jù)類型默認(rèn)為byte-8位

正數(shù):<font color=#0000ff>r = 20 >> 2</font>

20的二進制補碼:0001 0100

向右移動兩位后:0000 0101

結(jié)果:r = 5

負數(shù):r = -20 >> 2

-20 的二進制原碼 :1001 0100

-20 的二進制反碼 :1110 1011

-20 的二進制補碼 :1110 1100

右移兩位后的補碼:1111 1011

反碼:1111 1010

原碼:1000 0101

結(jié)果:r = -5

<font color=#ff0000>>>>表示無符號右移,也叫邏輯右移,即若該數(shù)為正,則高位補0,而若該數(shù)為負數(shù),則右移后高位同樣補0</font>

正數(shù): r = 20 >>> 2

的結(jié)果與 r = 20 >> 2 相同;

負數(shù): r = -20 >>> 2

注:以下數(shù)據(jù)類型默認(rèn)為int 32位

-20:源碼:10000000 00000000 00000000 00010100

反碼:11111111 11111111 11111111 11101011

補碼:11111111 11111111 11111111 11101100(在反碼基礎(chǔ)上加1)

右移:00111111 11111111 11111111 11111011

結(jié)果:r = 1073741819

總結(jié)(數(shù)學(xué)意義):

<font color=#green size=3>

  1. 2 >> 1 = 1即左邊數(shù)除以2的1次方,右移n位就除以2的n次方(二進制右移肯定變小);

  2. 2 << 1 = 4即左邊數(shù)乘以2的1次方,左移n位就乘以2的n次方(二進制左移肯定變大);

  3. 2 >>> 1 = 1 正數(shù)無符號右移等于右移;

</font>

在移位運算時,byte、short和char類型移位后的結(jié)果會變成int類型,對于byte、short、char和int進行移位時,規(guī)定實際移動的次數(shù)是移動次數(shù)和32的余數(shù),也就是移位33次和移位1次得到的結(jié)果相同。移動long型的數(shù)值時,規(guī)定實際移動的次數(shù)是移動次數(shù)和64的余數(shù),也就是移動66次和移動2次得到的結(jié)果相同。

參考:

http://www.imooc.com/wenda/detail/426292

https://www.cnblogs.com/chuijingjing/p/9405598.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 最近工作中被運算效率問題所困擾,比如大數(shù)據(jù)排序或者去重,因此現(xiàn)在需要補習(xí)一下位移運算。 首先講一下位移概念? 左位...
    等一夏_81f7閱讀 1,359評論 0 0
  • Java二進制與運算符知識 經(jīng)??吹揭恍㎎ava源碼和一些開源算法中常用到|、&、||、&&、>>、<<、>>>這...
    AnonyPer閱讀 1,292評論 0 0
  • 概述 在學(xué)習(xí)位運算之前,先說下幾個概念: 機器數(shù):一個數(shù)字在計算機中的二進制表達形式就叫做機器數(shù)。機器數(shù)是有符號位...
    騎著烏龜去看海閱讀 2,514評論 1 4
  • 婆婆說他晚上看孩子。我不知她是不是一時沖動,但我知道她真的是心情好什么都為你做,心情不好那就算了。我沒有接...
    AA杜大娟閱讀 123評論 1 1
  • 很多人雖然贊同用錢買時間,用錢買注意力,但實際操作中卻總是猶猶豫豫。關(guān)鍵的問題就在于,省下來的時間用來做什么了,多...
    于帥Jacob閱讀 443評論 0 0

友情鏈接更多精彩內(nèi)容