<< : 左移運算子,按照操作符右側指定的位數將操作符左邊的運算元向左移動(在低位補零)。例如:num << 1,相當於num乘以2
左移的規則只記住一點:丟棄最高位,0補最低位
運算規則:按二進位制的形式把所有數字向左移動對應的位數,高位移出(捨棄),高低位的空位補0.(如果移動的位數超過了該型別的最大位數,編譯器會對移動的位數取模,如對int型移動了33位,實際上只移動 了:33%32=1位)
>> : 右移運算子,按照操作符右側指定的位數將操作符左邊的運算元向右移動(若符號為正,在高位插入0;若符號為負,在高位插入1)。例如: num >> 1,相當於num除以2
右移的規則只記住一點:符號位不變,左邊補上符號位
運算規則:按二進位制的形式把所有數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補0,負數補1
>>> : 無符號右移,忽略符號位,空位都以0補齊(只對32位和64位的值有意義)
因為當左移運算時,所有的位都向左移動一位,在轉十進位制數時,相當於每一位多乘了乙個2然後相加,也就相當於總體多成了乙個2;右移同理
如果對於char、byte或者short型別的數值進行移位處理,那麼在移位進行之前,它們會先被轉為int型別,並且得到的結果也是乙個int型別的值。
注意:只有數值右端的低五位才有用。這樣可防止我們移位超過int型值所具有的位數(因為2的5次方為32,而int型值只有32位)
2.如果對於乙個long型別的數值進行處理,最後的到的結果也是long。此時只會用到數值右端的低6位,以防止移位超過long型數值具有的位數
此時,操作符左邊的值會移動由右邊的值指定的位數,再將得到的結果賦給左邊的變數。但在進行「無符號」右移位結合賦值操作時,可能會遇到乙個問題:如果對byte或short值進行這樣的移位運算,得到的可能不是正確的結果。原因:它們會先被轉成int型別,再進行右移操作,然後被截斷,賦值給原來的型別,在這種情況下可能得到-1的結果。
Java移位操作符以及按位操作符
按位操作符 針對兩個整數引數中的對應位執行布林代數運算,並生成乙個結果。按位與 如果兩個輸入位都是1則生成乙個輸出位1,否則生成乙個輸出位0。按位或 如果兩個輸入位只要有一位是1則生成乙個輸出位1.否則生成乙個輸出位為0。按位異或 如果兩個輸入位只有其中一位是1那麼生成輸出位1,否則生成乙個輸出位為...
移位操作符
移位操作符 位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的...
移位操作符
左移 在左移位中,值最左邊的幾位被丟棄,右邊多出來的幾個空格則由 0 補齊。如上圖。右移 右移位操作存在乙個左移位操作不曾面臨的問題,從左邊移入新位時,可以選擇兩種方案。一種是邏輯移位,左邊移入位用 0 填充 另一種是算數移位,左邊移入的位由原來的符號位決定,符號位為 1 則移入的位均為 1 符號位...