天天看點

java實作循環左移和右移的簡單算法

 byte a=112,用程式實作,将其循環左移三位和右移三位。

112的二進制原碼:0111 0000

112循環左移3位後的二進制碼:1000 0011

112循環右移3位後的二進制碼:0000 1110

先将循環左移的程式代碼告訴大家:

public class TestCircle{

 public static void main(String args[]){

  byte x=112;

  System.out.println((byte)(x<<3|x>>5));

 }

}

程式的輸出結果是-125,它的原碼為1111 1101,補碼為1000 0011(正好是112循環左移三位後的數字)

再看循環右移的程式代碼:

public class TestCircle{

 public static void main(String args[]){

  byte x=112;

  System.out.println((byte)(x>>3|x<<5));

 }

}

程式的輸出結果是14,他的原碼、補碼相同都是0000 1110(正好是112循環右移三位後的數字)

總結:對于一個資料類型長度為L的資料n,對其進行循環左移m位(或右移m位),隻需将資料n左移(或右移)m位的結果和資料n右移(或左移)L-m位的結果進行或運算,再将或運算的結果強制轉換為原類型即可。