Java的移位( 和》)運算問題

2021-06-06 06:05:30 字數 807 閱讀 1683

解讀

運算子》指的是對它左邊的運算元帶符號右移位。我們知道資料的補碼表示,如果是負數,那麼它的最高位是1,所以右移位操作時左邊的空缺用1填補。

運算子》也是右移,但它與》的區別是對於負數,右移不是用1填補,而是用0填補。也就是》不考慮數的正負,機械地移位就是了。

另外:>>>的左邊運算元如果是char,byte,short,運算前會先轉換成int,運算結果也就成了int,如果再對運算後的結果int強制型別轉換到byte,那它只會機械地擷取資料的最右邊8位。

案例程式一

byte i = (byte)0xf3;//二進位制:11110011

byte j = (byte)(i >>> 3);

system.out.printf("%x", j);

程式二byte i = (byte)0xf3;//二進位制:11110011

byte j = (byte)((i & 0xff) >>> 3);

system.out.printf("%x", j);

程式1的執行結果是:fe,也就是二進位制:11111110( 0xf3轉換為整型後會變成fffffff3,二進位制為11111111111111111111111111110011,移位3位後變成00011111111111111111111111111110,轉換為byte,結果自然為11111110 ),而不是預期的結果:1e,也就是二進位制:00011110。

程式2中將運算元移位前與0xff作一次按位與運算後得到預期的結果(這裡0xff是整型,完整的寫法是0x000000ff,因此0xf3 & 0xff的結果為000000f3,該值右移三位再轉換為byte的值為1e)。

java 移位運算

移位運算子就是在二進位制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種 左移 帶符號右移 和 無符號右移 在移位運算時,byte short和char型別移位後的結果會變成int型別,對於byte short char和int進行移位時,規定實際移動的次數是移動次數和32的餘數,也就...

java隨機 移位運算

package com.eclipse.test public class testtwo public static void pr object str 4的二進位制 29個0 100 向左移10位數 低位補0 後的 二進位制為 16個0 1000000000000 轉換為十進位制 第乙個結果為...

Java基礎 移位運算

移位運算子就是在二進位制的基礎上對數字進行平移。按照平移的方向和填充數字的規則分為三種 左移 帶符號右移 和 無符號右移 在移位運算時,byte short和char型別移位後的結果會變成int型別,對於byte short char和int進行移位時,規定實際移動的次數是移動次數和32的餘數,也就...