Java中的三種位移運算子

weixin_34208283發表於2016-08-21

一直以來位移運算子都用的很少,所以一直忽略了它。不過今天突然明白了規則於是乎就上網翻看了一下別人的一些部落格,驗證了自己的想法,沒想到還真是這樣的,很是欣慰呀,至少以後在看到此類東西不會一頭霧水了。以下內容包含網上查詢的內容

  1. << 左移運算子
    表示式:value << num
    左移的規則
    丟棄最高位,0補最低位
    按二進位制形式把所有的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
    當左移的運算數是int 型別時,每移動1位它的第31位就要被移出並且丟棄;
    當左移的運算數是long 型別時,每移動1位它的第63位就要被移出並且丟棄。
    當左移的運算數是byte 和short型別時,將自動把這些型別擴大為 int 型。
    計算過程
    舉例:8是int型的情況下8<<3結果等於64,相當於8×2的3次方
    把8轉換為二進位制數字0000 0000 0000 0000 0000 0000 0000 1000,
    把這組數字左移3位則得到的最終結果是0000 0000 0000 0000 0000 0000 0100 0000,

  2. >> 右移運算子
    表示式:value >> num
    左移的規則
    符號位不變,左邊補上符號位
    按二進位制形式把所有的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1
    當右移的運算數是byte 和short型別時,將自動把這些型別擴大為 int 型。
    如果要移走的值為負數,每一次右移都在左邊補1,如果要移走的值為正數,每一次右移都在左邊補0,這叫做符號位擴充套件(保留符號位),在進行右移操作時用來保持負數的符號。
    計算過程
    35 >> 2(35為int型)35 >> 2結果等於8,相當於8/2的2次方
    35轉換為二進位制:0000 0000 0000 0000 0000 0000 0010 0011
    把低位的最後兩個數字移出:0000 0000 0000 0000 0000 0000 0000 1000
    轉換為十進位制: 8

  3. >>> 無符號右移運算子
    表示式:value >>> num
    無符號右移的規則只記住一點:忽略了符號位擴充套件,0補最高位
    無符號右移運算子>>> 只是對32位和64位的值有意義

補充一下之前欠缺的:0x8f,此16進位制數轉換為二進位制位1000 1111,
通常顏色用16進位制數
例如:0xFBFFFFFF,從左往右FB表示透明度,FFFFFF表示顏色
用二進位制表示就是:
1111 1011 1111 1111 1111 1111

相關文章