分析輪子(二)- << ,>>,>> (左移、右移、無符號右移) 分析輪子(一)-ArrayList.java

前言:寫 分析輪子(一)-ArrayList.java 的時候看到源碼中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 這樣的代碼,之前也學習過左移、右移,無符號右移三類移位運算符,不過忘記了具體的變化規則,因而就實驗了一把,便有了本篇博文。html

 注:玩的是JDK1.7版本java

一:先看結論app

       1)<< 左移 將左操做數向左移動,不管作操做數是正仍是負,都在低位補「0」post

       2)>> 帶符號的右移 將左操做數右移,若是左操做數是正數,則高位補「0」,若是左操做數是負數,則高位補「1」學習

       3)>>> 無符號右移,將左操做數右移,不管左操做數是正仍是負,都在高位補「0」測試

 

二:再看代碼ui

      代碼中,我實驗了極少一部分數據,不過也能達到咱們實驗的目的,這個若是有興趣,能夠本身玩一下,程序比較簡單,調整下參數執行一下就一目瞭然!url

/**
 * @description:移位運算符測試類
 * @author:godtrue
 * @create:2018-09-05
 */
public class Move {
    /**
     * 開始循環的基值
     */
    private static final int START_LOOP = -15;

    /**
     * 結束循環的基值
     */
    private static final int END_LOOP = 15;

    /**
     * 移動的位置
     */
    private static final int MOVE_POSITION = 1;

    /**
    *
    *@description: 測試的入口方法
    *@param args
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    public static void main(String[] args) {
        showBinaryNum();
        System.out.println("\n\n\n");
        rightMove();
        System.out.println("\n\n\n");
        rightMoveUnsigned();
        System.out.println("\n\n\n");
        leftMove();
    }

    /**
    *
    *@description: 測試 無符號右移移位運算符
    *@param
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    private static void rightMove(){
        int line = 1;
        for (int i = Move.START_LOOP; i <= Move.END_LOOP; i++) {
            StringBuilder logInfo = new StringBuilder()
                    .append("[ ").append("第 ").append(line++).append(" 行")
                    .append(" ]   [ ").append("測試 右移 移位運算符 >> ")
                    .append(" ]   [ ").append("the test num is :").append(i)
                    .append(" ]   [ ").append(i).append(" >> ").append(Move.MOVE_POSITION).append(" is :").append(i >> Move.MOVE_POSITION)
                    .append(" ]   [ ").append("binary style is :").append(Integer.toBinaryString(i)).append(" >> ").append(Move.MOVE_POSITION).append(" is :").append(Integer.toBinaryString((i >> Move.MOVE_POSITION)))
                    .append(" ]");
            printLogInfo(i,logInfo);
        }
    }

    /**
    *
    *@description: 測試 無符號右移移位運算符
    *@param
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    private static void rightMoveUnsigned(){
        int line = 1;
        for (int i = Move.START_LOOP; i <= Move.END_LOOP; i++) {
            StringBuilder logInfo = new StringBuilder()
                    .append("[ ").append("第 ").append(line++).append(" 行")
                    .append(" ]   [ ").append("測試 無符號右移 移位運算符 >>> ")
                    .append(" ]   [ ").append(i).append(" >>> ").append(Move.MOVE_POSITION).append(" is :").append(i >>> Move.MOVE_POSITION)
                    .append(" ]   [ ").append("binary style is :").append(Integer.toBinaryString(i)).append(" >>> ").append(Move.MOVE_POSITION).append(" is :").append(Integer.toBinaryString((i >>> Move.MOVE_POSITION)))
                    .append(" ]");
            printLogInfo(i,logInfo);
        }
    }

    /**
    *
    *@description: 測試 左移移位運算符
    *@param
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    private static void leftMove(){
        int line = 1;
        for (int i = Move.START_LOOP; i <= Move.END_LOOP; i++) {
            StringBuilder logInfo = new StringBuilder()
                    .append("[ ").append("第 ").append(line++).append(" 行")
                    .append(" ]   [ ").append("測試 左移 移位運算符 << ")
                    .append(" ]   [ ").append(i).append(" << ").append(Move.MOVE_POSITION).append(" is :").append(i << Move.MOVE_POSITION)
                    .append(" ]   [ ").append("binary style is :").append(Integer.toBinaryString(i)).append(" << ").append(Move.MOVE_POSITION).append(" is :").append(Integer.toBinaryString((i << Move.MOVE_POSITION)))
                    .append(" ]");
            printLogInfo(i,logInfo);
        }
    }

    /**
    *
    *@description:
    *@param
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    private static void showBinaryNum(){
        int line = 1;
        for (int i = Move.START_LOOP; i <= Move.END_LOOP; i++) {
            StringBuilder logInfo = new StringBuilder()
                    .append("[ ").append("第 ").append(line++).append(" 行")
                    .append(" ]   [ ").append("測試 數據 各類進制 的展現形式")
                    .append(" ]   [ ").append("十進制數:").append(i)
                    .append(" ]   [ ").append("二進制表示形式爲:").append(Integer.toBinaryString(i))
                    .append(" ]   [ ").append("八進制表示形式爲:").append(Integer.toOctalString(i))
                    .append(" ]   [ ").append("十六進制表示形式爲:").append(Integer.toHexString(i))
                    .append(" ]   [ ").append("二進制表示形式爲(帶符號):").append(Integer.toString(i,2))
                    .append(" ]   [ ").append("八進制表示形式爲(帶符號):").append(Integer.toString(i,8))
                    .append(" ]   [ ").append("十六進制表示形式爲(帶符號):").append(Integer.toString(i,16))
                    .append(" ]");
            printLogInfo(i,logInfo);
        }
    }

    /**
    *
    *@description:  打印測試日誌信息
    *@param i
    *@param logInfo
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    private static void printLogInfo(int i,StringBuilder logInfo){
        if (i == 0) {
            System.out.println("\n"+logInfo+"\n");
        }else{
            System.out.println(logInfo);
        }
    }
}

 

三:結合代碼運行的日誌,回頭再看結論(之因此,貼出程序執行日誌,是由於經過執行日誌能很好的理解移位操做的運算規則)spa

 1)數據的十進制、二進制、八進制、十六進制的表示形式,移位操做是針對二進制數據而言的,清楚其二進制的表示形式,理解移位操做就簡單多了日誌

[ 第 1 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-15 ]   [ 二進制表示形式爲:11111111111111111111111111110001 ]   [ 八進制表示形式爲:37777777761 ]   [ 十六進制表示形式爲:fffffff1 ]   [ 二進制表示形式爲(帶符號):-1111 ]   [ 八進制表示形式爲(帶符號):-17 ]   [ 十六進制表示形式爲(帶符號):-f ]
[ 第 2 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-14 ]   [ 二進制表示形式爲:11111111111111111111111111110010 ]   [ 八進制表示形式爲:37777777762 ]   [ 十六進制表示形式爲:fffffff2 ]   [ 二進制表示形式爲(帶符號):-1110 ]   [ 八進制表示形式爲(帶符號):-16 ]   [ 十六進制表示形式爲(帶符號):-e ]
[ 第 3 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-13 ]   [ 二進制表示形式爲:11111111111111111111111111110011 ]   [ 八進制表示形式爲:37777777763 ]   [ 十六進制表示形式爲:fffffff3 ]   [ 二進制表示形式爲(帶符號):-1101 ]   [ 八進制表示形式爲(帶符號):-15 ]   [ 十六進制表示形式爲(帶符號):-d ]
[ 第 4 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-12 ]   [ 二進制表示形式爲:11111111111111111111111111110100 ]   [ 八進制表示形式爲:37777777764 ]   [ 十六進制表示形式爲:fffffff4 ]   [ 二進制表示形式爲(帶符號):-1100 ]   [ 八進制表示形式爲(帶符號):-14 ]   [ 十六進制表示形式爲(帶符號):-c ]
[ 第 5 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-11 ]   [ 二進制表示形式爲:11111111111111111111111111110101 ]   [ 八進制表示形式爲:37777777765 ]   [ 十六進制表示形式爲:fffffff5 ]   [ 二進制表示形式爲(帶符號):-1011 ]   [ 八進制表示形式爲(帶符號):-13 ]   [ 十六進制表示形式爲(帶符號):-b ]
[ 第 6 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-10 ]   [ 二進制表示形式爲:11111111111111111111111111110110 ]   [ 八進制表示形式爲:37777777766 ]   [ 十六進制表示形式爲:fffffff6 ]   [ 二進制表示形式爲(帶符號):-1010 ]   [ 八進制表示形式爲(帶符號):-12 ]   [ 十六進制表示形式爲(帶符號):-a ]
[ 第 7 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-9 ]   [ 二進制表示形式爲:11111111111111111111111111110111 ]   [ 八進制表示形式爲:37777777767 ]   [ 十六進制表示形式爲:fffffff7 ]   [ 二進制表示形式爲(帶符號):-1001 ]   [ 八進制表示形式爲(帶符號):-11 ]   [ 十六進制表示形式爲(帶符號):-9 ]
[ 第 8 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-8 ]   [ 二進制表示形式爲:11111111111111111111111111111000 ]   [ 八進制表示形式爲:37777777770 ]   [ 十六進制表示形式爲:fffffff8 ]   [ 二進制表示形式爲(帶符號):-1000 ]   [ 八進制表示形式爲(帶符號):-10 ]   [ 十六進制表示形式爲(帶符號):-8 ]
[ 第 9 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-7 ]   [ 二進制表示形式爲:11111111111111111111111111111001 ]   [ 八進制表示形式爲:37777777771 ]   [ 十六進制表示形式爲:fffffff9 ]   [ 二進制表示形式爲(帶符號):-111 ]   [ 八進制表示形式爲(帶符號):-7 ]   [ 十六進制表示形式爲(帶符號):-7 ]
[ 第 10 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-6 ]   [ 二進制表示形式爲:11111111111111111111111111111010 ]   [ 八進制表示形式爲:37777777772 ]   [ 十六進制表示形式爲:fffffffa ]   [ 二進制表示形式爲(帶符號):-110 ]   [ 八進制表示形式爲(帶符號):-6 ]   [ 十六進制表示形式爲(帶符號):-6 ]
[ 第 11 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-5 ]   [ 二進制表示形式爲:11111111111111111111111111111011 ]   [ 八進制表示形式爲:37777777773 ]   [ 十六進制表示形式爲:fffffffb ]   [ 二進制表示形式爲(帶符號):-101 ]   [ 八進制表示形式爲(帶符號):-5 ]   [ 十六進制表示形式爲(帶符號):-5 ]
[ 第 12 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-4 ]   [ 二進制表示形式爲:11111111111111111111111111111100 ]   [ 八進制表示形式爲:37777777774 ]   [ 十六進制表示形式爲:fffffffc ]   [ 二進制表示形式爲(帶符號):-100 ]   [ 八進制表示形式爲(帶符號):-4 ]   [ 十六進制表示形式爲(帶符號):-4 ]
[ 第 13 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-3 ]   [ 二進制表示形式爲:11111111111111111111111111111101 ]   [ 八進制表示形式爲:37777777775 ]   [ 十六進制表示形式爲:fffffffd ]   [ 二進制表示形式爲(帶符號):-11 ]   [ 八進制表示形式爲(帶符號):-3 ]   [ 十六進制表示形式爲(帶符號):-3 ]
[ 第 14 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-2 ]   [ 二進制表示形式爲:11111111111111111111111111111110 ]   [ 八進制表示形式爲:37777777776 ]   [ 十六進制表示形式爲:fffffffe ]   [ 二進制表示形式爲(帶符號):-10 ]   [ 八進制表示形式爲(帶符號):-2 ]   [ 十六進制表示形式爲(帶符號):-2 ]
[ 第 15 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:-1 ]   [ 二進制表示形式爲:11111111111111111111111111111111 ]   [ 八進制表示形式爲:37777777777 ]   [ 十六進制表示形式爲:ffffffff ]   [ 二進制表示形式爲(帶符號):-1 ]   [ 八進制表示形式爲(帶符號):-1 ]   [ 十六進制表示形式爲(帶符號):-1 ]

[ 第 16 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:0 ]   [ 二進制表示形式爲:0 ]   [ 八進制表示形式爲:0 ]   [ 十六進制表示形式爲:0 ]   [ 二進制表示形式爲(帶符號):0 ]   [ 八進制表示形式爲(帶符號):0 ]   [ 十六進制表示形式爲(帶符號):0 ]

[ 第 17 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:1 ]   [ 二進制表示形式爲:1 ]   [ 八進制表示形式爲:1 ]   [ 十六進制表示形式爲:1 ]   [ 二進制表示形式爲(帶符號):1 ]   [ 八進制表示形式爲(帶符號):1 ]   [ 十六進制表示形式爲(帶符號):1 ]
[ 第 18 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:2 ]   [ 二進制表示形式爲:10 ]   [ 八進制表示形式爲:2 ]   [ 十六進制表示形式爲:2 ]   [ 二進制表示形式爲(帶符號):10 ]   [ 八進制表示形式爲(帶符號):2 ]   [ 十六進制表示形式爲(帶符號):2 ]
[ 第 19 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:3 ]   [ 二進制表示形式爲:11 ]   [ 八進制表示形式爲:3 ]   [ 十六進制表示形式爲:3 ]   [ 二進制表示形式爲(帶符號):11 ]   [ 八進制表示形式爲(帶符號):3 ]   [ 十六進制表示形式爲(帶符號):3 ]
[ 第 20 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:4 ]   [ 二進制表示形式爲:100 ]   [ 八進制表示形式爲:4 ]   [ 十六進制表示形式爲:4 ]   [ 二進制表示形式爲(帶符號):100 ]   [ 八進制表示形式爲(帶符號):4 ]   [ 十六進制表示形式爲(帶符號):4 ]
[ 第 21 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:5 ]   [ 二進制表示形式爲:101 ]   [ 八進制表示形式爲:5 ]   [ 十六進制表示形式爲:5 ]   [ 二進制表示形式爲(帶符號):101 ]   [ 八進制表示形式爲(帶符號):5 ]   [ 十六進制表示形式爲(帶符號):5 ]
[ 第 22 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:6 ]   [ 二進制表示形式爲:110 ]   [ 八進制表示形式爲:6 ]   [ 十六進制表示形式爲:6 ]   [ 二進制表示形式爲(帶符號):110 ]   [ 八進制表示形式爲(帶符號):6 ]   [ 十六進制表示形式爲(帶符號):6 ]
[ 第 23 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:7 ]   [ 二進制表示形式爲:111 ]   [ 八進制表示形式爲:7 ]   [ 十六進制表示形式爲:7 ]   [ 二進制表示形式爲(帶符號):111 ]   [ 八進制表示形式爲(帶符號):7 ]   [ 十六進制表示形式爲(帶符號):7 ]
[ 第 24 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:8 ]   [ 二進制表示形式爲:1000 ]   [ 八進制表示形式爲:10 ]   [ 十六進制表示形式爲:8 ]   [ 二進制表示形式爲(帶符號):1000 ]   [ 八進制表示形式爲(帶符號):10 ]   [ 十六進制表示形式爲(帶符號):8 ]
[ 第 25 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:9 ]   [ 二進制表示形式爲:1001 ]   [ 八進制表示形式爲:11 ]   [ 十六進制表示形式爲:9 ]   [ 二進制表示形式爲(帶符號):1001 ]   [ 八進制表示形式爲(帶符號):11 ]   [ 十六進制表示形式爲(帶符號):9 ]
[ 第 26 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:10 ]   [ 二進制表示形式爲:1010 ]   [ 八進制表示形式爲:12 ]   [ 十六進制表示形式爲:a ]   [ 二進制表示形式爲(帶符號):1010 ]   [ 八進制表示形式爲(帶符號):12 ]   [ 十六進制表示形式爲(帶符號):a ]
[ 第 27 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:11 ]   [ 二進制表示形式爲:1011 ]   [ 八進制表示形式爲:13 ]   [ 十六進制表示形式爲:b ]   [ 二進制表示形式爲(帶符號):1011 ]   [ 八進制表示形式爲(帶符號):13 ]   [ 十六進制表示形式爲(帶符號):b ]
[ 第 28 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:12 ]   [ 二進制表示形式爲:1100 ]   [ 八進制表示形式爲:14 ]   [ 十六進制表示形式爲:c ]   [ 二進制表示形式爲(帶符號):1100 ]   [ 八進制表示形式爲(帶符號):14 ]   [ 十六進制表示形式爲(帶符號):c ]
[ 第 29 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:13 ]   [ 二進制表示形式爲:1101 ]   [ 八進制表示形式爲:15 ]   [ 十六進制表示形式爲:d ]   [ 二進制表示形式爲(帶符號):1101 ]   [ 八進制表示形式爲(帶符號):15 ]   [ 十六進制表示形式爲(帶符號):d ]
[ 第 30 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:14 ]   [ 二進制表示形式爲:1110 ]   [ 八進制表示形式爲:16 ]   [ 十六進制表示形式爲:e ]   [ 二進制表示形式爲(帶符號):1110 ]   [ 八進制表示形式爲(帶符號):16 ]   [ 十六進制表示形式爲(帶符號):e ]
[ 第 31 行 ]   [ 測試 數據 各類進制 的展現形式 ]   [ 十進制數:15 ]   [ 二進制表示形式爲:1111 ]   [ 八進制表示形式爲:17 ]   [ 十六進制表示形式爲:f ]   [ 二進制表示形式爲(帶符號):1111 ]   [ 八進制表示形式爲(帶符號):17 ]   [ 十六進制表示形式爲(帶符號):f ]

 

2)>> 帶符號的右移 將左操做數右移,若是左操做數是正數,則高位補「0」,若是左操做數是負數,則高位補「1」,以下是右移一位的日誌結果

[ 第 1 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-15 ]   [ -15 >> 1 is :-8 ]   [ binary style is :11111111111111111111111111110001 >> 1 is :11111111111111111111111111111000 ]
[ 第 2 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-14 ]   [ -14 >> 1 is :-7 ]   [ binary style is :11111111111111111111111111110010 >> 1 is :11111111111111111111111111111001 ]
[ 第 3 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-13 ]   [ -13 >> 1 is :-7 ]   [ binary style is :11111111111111111111111111110011 >> 1 is :11111111111111111111111111111001 ]
[ 第 4 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-12 ]   [ -12 >> 1 is :-6 ]   [ binary style is :11111111111111111111111111110100 >> 1 is :11111111111111111111111111111010 ]
[ 第 5 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-11 ]   [ -11 >> 1 is :-6 ]   [ binary style is :11111111111111111111111111110101 >> 1 is :11111111111111111111111111111010 ]
[ 第 6 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-10 ]   [ -10 >> 1 is :-5 ]   [ binary style is :11111111111111111111111111110110 >> 1 is :11111111111111111111111111111011 ]
[ 第 7 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-9 ]   [ -9 >> 1 is :-5 ]   [ binary style is :11111111111111111111111111110111 >> 1 is :11111111111111111111111111111011 ]
[ 第 8 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-8 ]   [ -8 >> 1 is :-4 ]   [ binary style is :11111111111111111111111111111000 >> 1 is :11111111111111111111111111111100 ]
[ 第 9 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-7 ]   [ -7 >> 1 is :-4 ]   [ binary style is :11111111111111111111111111111001 >> 1 is :11111111111111111111111111111100 ]
[ 第 10 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-6 ]   [ -6 >> 1 is :-3 ]   [ binary style is :11111111111111111111111111111010 >> 1 is :11111111111111111111111111111101 ]
[ 第 11 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-5 ]   [ -5 >> 1 is :-3 ]   [ binary style is :11111111111111111111111111111011 >> 1 is :11111111111111111111111111111101 ]
[ 第 12 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-4 ]   [ -4 >> 1 is :-2 ]   [ binary style is :11111111111111111111111111111100 >> 1 is :11111111111111111111111111111110 ]
[ 第 13 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-3 ]   [ -3 >> 1 is :-2 ]   [ binary style is :11111111111111111111111111111101 >> 1 is :11111111111111111111111111111110 ]
[ 第 14 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-2 ]   [ -2 >> 1 is :-1 ]   [ binary style is :11111111111111111111111111111110 >> 1 is :11111111111111111111111111111111 ]
[ 第 15 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :-1 ]   [ -1 >> 1 is :-1 ]   [ binary style is :11111111111111111111111111111111 >> 1 is :11111111111111111111111111111111 ]

[ 第 16 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :0 ]   [ 0 >> 1 is :0 ]   [ binary style is :0 >> 1 is :0 ]

[ 第 17 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :1 ]   [ 1 >> 1 is :0 ]   [ binary style is :1 >> 1 is :0 ]
[ 第 18 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :2 ]   [ 2 >> 1 is :1 ]   [ binary style is :10 >> 1 is :1 ]
[ 第 19 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :3 ]   [ 3 >> 1 is :1 ]   [ binary style is :11 >> 1 is :1 ]
[ 第 20 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :4 ]   [ 4 >> 1 is :2 ]   [ binary style is :100 >> 1 is :10 ]
[ 第 21 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :5 ]   [ 5 >> 1 is :2 ]   [ binary style is :101 >> 1 is :10 ]
[ 第 22 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :6 ]   [ 6 >> 1 is :3 ]   [ binary style is :110 >> 1 is :11 ]
[ 第 23 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :7 ]   [ 7 >> 1 is :3 ]   [ binary style is :111 >> 1 is :11 ]
[ 第 24 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :8 ]   [ 8 >> 1 is :4 ]   [ binary style is :1000 >> 1 is :100 ]
[ 第 25 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :9 ]   [ 9 >> 1 is :4 ]   [ binary style is :1001 >> 1 is :100 ]
[ 第 26 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :10 ]   [ 10 >> 1 is :5 ]   [ binary style is :1010 >> 1 is :101 ]
[ 第 27 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :11 ]   [ 11 >> 1 is :5 ]   [ binary style is :1011 >> 1 is :101 ]
[ 第 28 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :12 ]   [ 12 >> 1 is :6 ]   [ binary style is :1100 >> 1 is :110 ]
[ 第 29 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :13 ]   [ 13 >> 1 is :6 ]   [ binary style is :1101 >> 1 is :110 ]
[ 第 30 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :14 ]   [ 14 >> 1 is :7 ]   [ binary style is :1110 >> 1 is :111 ]
[ 第 31 行 ]   [ 測試 右移 移位運算符 >>  ]   [ the test num is :15 ]   [ 15 >> 1 is :7 ]   [ binary style is :1111 >> 1 is :111 ]

 

3)>>> 無符號右移,將左操做數右移,不管左操做數是正仍是負,都在高位補「0」,以下是右移一位的日誌結果

[ 第 1 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -15 >>> 1 is :2147483640 ]   [ binary style is :11111111111111111111111111110001 >>> 1 is :1111111111111111111111111111000 ]
[ 第 2 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -14 >>> 1 is :2147483641 ]   [ binary style is :11111111111111111111111111110010 >>> 1 is :1111111111111111111111111111001 ]
[ 第 3 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -13 >>> 1 is :2147483641 ]   [ binary style is :11111111111111111111111111110011 >>> 1 is :1111111111111111111111111111001 ]
[ 第 4 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -12 >>> 1 is :2147483642 ]   [ binary style is :11111111111111111111111111110100 >>> 1 is :1111111111111111111111111111010 ]
[ 第 5 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -11 >>> 1 is :2147483642 ]   [ binary style is :11111111111111111111111111110101 >>> 1 is :1111111111111111111111111111010 ]
[ 第 6 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -10 >>> 1 is :2147483643 ]   [ binary style is :11111111111111111111111111110110 >>> 1 is :1111111111111111111111111111011 ]
[ 第 7 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -9 >>> 1 is :2147483643 ]   [ binary style is :11111111111111111111111111110111 >>> 1 is :1111111111111111111111111111011 ]
[ 第 8 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -8 >>> 1 is :2147483644 ]   [ binary style is :11111111111111111111111111111000 >>> 1 is :1111111111111111111111111111100 ]
[ 第 9 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -7 >>> 1 is :2147483644 ]   [ binary style is :11111111111111111111111111111001 >>> 1 is :1111111111111111111111111111100 ]
[ 第 10 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -6 >>> 1 is :2147483645 ]   [ binary style is :11111111111111111111111111111010 >>> 1 is :1111111111111111111111111111101 ]
[ 第 11 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -5 >>> 1 is :2147483645 ]   [ binary style is :11111111111111111111111111111011 >>> 1 is :1111111111111111111111111111101 ]
[ 第 12 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -4 >>> 1 is :2147483646 ]   [ binary style is :11111111111111111111111111111100 >>> 1 is :1111111111111111111111111111110 ]
[ 第 13 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -3 >>> 1 is :2147483646 ]   [ binary style is :11111111111111111111111111111101 >>> 1 is :1111111111111111111111111111110 ]
[ 第 14 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -2 >>> 1 is :2147483647 ]   [ binary style is :11111111111111111111111111111110 >>> 1 is :1111111111111111111111111111111 ]
[ 第 15 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ -1 >>> 1 is :2147483647 ]   [ binary style is :11111111111111111111111111111111 >>> 1 is :1111111111111111111111111111111 ]

[ 第 16 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 0 >>> 1 is :0 ]   [ binary style is :0 >>> 1 is :0 ]

[ 第 17 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 1 >>> 1 is :0 ]   [ binary style is :1 >>> 1 is :0 ]
[ 第 18 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 2 >>> 1 is :1 ]   [ binary style is :10 >>> 1 is :1 ]
[ 第 19 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 3 >>> 1 is :1 ]   [ binary style is :11 >>> 1 is :1 ]
[ 第 20 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 4 >>> 1 is :2 ]   [ binary style is :100 >>> 1 is :10 ]
[ 第 21 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 5 >>> 1 is :2 ]   [ binary style is :101 >>> 1 is :10 ]
[ 第 22 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 6 >>> 1 is :3 ]   [ binary style is :110 >>> 1 is :11 ]
[ 第 23 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 7 >>> 1 is :3 ]   [ binary style is :111 >>> 1 is :11 ]
[ 第 24 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 8 >>> 1 is :4 ]   [ binary style is :1000 >>> 1 is :100 ]
[ 第 25 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 9 >>> 1 is :4 ]   [ binary style is :1001 >>> 1 is :100 ]
[ 第 26 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 10 >>> 1 is :5 ]   [ binary style is :1010 >>> 1 is :101 ]
[ 第 27 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 11 >>> 1 is :5 ]   [ binary style is :1011 >>> 1 is :101 ]
[ 第 28 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 12 >>> 1 is :6 ]   [ binary style is :1100 >>> 1 is :110 ]
[ 第 29 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 13 >>> 1 is :6 ]   [ binary style is :1101 >>> 1 is :110 ]
[ 第 30 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 14 >>> 1 is :7 ]   [ binary style is :1110 >>> 1 is :111 ]
[ 第 31 行 ]   [ 測試 無符號右移 移位運算符 >>>  ]   [ 15 >>> 1 is :7 ]   [ binary style is :1111 >>> 1 is :111 ]

 

4)<< 左移 將左操做數向左移動,不管作操做數是正仍是負,都在低位補「0」,以下是左移一位的日誌結果

[ 第 1 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -15 << 1 is :-30 ]   [ binary style is :11111111111111111111111111110001 << 1 is :11111111111111111111111111100010 ]
[ 第 2 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -14 << 1 is :-28 ]   [ binary style is :11111111111111111111111111110010 << 1 is :11111111111111111111111111100100 ]
[ 第 3 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -13 << 1 is :-26 ]   [ binary style is :11111111111111111111111111110011 << 1 is :11111111111111111111111111100110 ]
[ 第 4 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -12 << 1 is :-24 ]   [ binary style is :11111111111111111111111111110100 << 1 is :11111111111111111111111111101000 ]
[ 第 5 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -11 << 1 is :-22 ]   [ binary style is :11111111111111111111111111110101 << 1 is :11111111111111111111111111101010 ]
[ 第 6 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -10 << 1 is :-20 ]   [ binary style is :11111111111111111111111111110110 << 1 is :11111111111111111111111111101100 ]
[ 第 7 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -9 << 1 is :-18 ]   [ binary style is :11111111111111111111111111110111 << 1 is :11111111111111111111111111101110 ]
[ 第 8 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -8 << 1 is :-16 ]   [ binary style is :11111111111111111111111111111000 << 1 is :11111111111111111111111111110000 ]
[ 第 9 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -7 << 1 is :-14 ]   [ binary style is :11111111111111111111111111111001 << 1 is :11111111111111111111111111110010 ]
[ 第 10 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -6 << 1 is :-12 ]   [ binary style is :11111111111111111111111111111010 << 1 is :11111111111111111111111111110100 ]
[ 第 11 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -5 << 1 is :-10 ]   [ binary style is :11111111111111111111111111111011 << 1 is :11111111111111111111111111110110 ]
[ 第 12 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -4 << 1 is :-8 ]   [ binary style is :11111111111111111111111111111100 << 1 is :11111111111111111111111111111000 ]
[ 第 13 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -3 << 1 is :-6 ]   [ binary style is :11111111111111111111111111111101 << 1 is :11111111111111111111111111111010 ]
[ 第 14 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -2 << 1 is :-4 ]   [ binary style is :11111111111111111111111111111110 << 1 is :11111111111111111111111111111100 ]
[ 第 15 行 ]   [ 測試 左移 移位運算符 <<  ]   [ -1 << 1 is :-2 ]   [ binary style is :11111111111111111111111111111111 << 1 is :11111111111111111111111111111110 ]

[ 第 16 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 0 << 1 is :0 ]   [ binary style is :0 << 1 is :0 ]

[ 第 17 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 1 << 1 is :2 ]   [ binary style is :1 << 1 is :10 ]
[ 第 18 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 2 << 1 is :4 ]   [ binary style is :10 << 1 is :100 ]
[ 第 19 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 3 << 1 is :6 ]   [ binary style is :11 << 1 is :110 ]
[ 第 20 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 4 << 1 is :8 ]   [ binary style is :100 << 1 is :1000 ]
[ 第 21 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 5 << 1 is :10 ]   [ binary style is :101 << 1 is :1010 ]
[ 第 22 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 6 << 1 is :12 ]   [ binary style is :110 << 1 is :1100 ]
[ 第 23 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 7 << 1 is :14 ]   [ binary style is :111 << 1 is :1110 ]
[ 第 24 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 8 << 1 is :16 ]   [ binary style is :1000 << 1 is :10000 ]
[ 第 25 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 9 << 1 is :18 ]   [ binary style is :1001 << 1 is :10010 ]
[ 第 26 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 10 << 1 is :20 ]   [ binary style is :1010 << 1 is :10100 ]
[ 第 27 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 11 << 1 is :22 ]   [ binary style is :1011 << 1 is :10110 ]
[ 第 28 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 12 << 1 is :24 ]   [ binary style is :1100 << 1 is :11000 ]
[ 第 29 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 13 << 1 is :26 ]   [ binary style is :1101 << 1 is :11010 ]
[ 第 30 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 14 << 1 is :28 ]   [ binary style is :1110 << 1 is :11100 ]
[ 第 31 行 ]   [ 測試 左移 移位運算符 <<  ]   [ 15 << 1 is :30 ]   [ binary style is :1111 << 1 is :11110 ]

 

四:補充

 

    /**
    *
    *@description: 測試的入口方法
    *@param args
    *@return: void
    *@author: godtrue
    *@createTime: 2018-09-05
    *@version: v1.0
    */
    public static void main(String[] args) {
        System.out.println("整數 -1 的二進制表示:"+Integer.toBinaryString(-1));
        System.out.println("整數  0 的二進制表示:"+Integer.toBinaryString(0));
        System.out.println("整數  1 的二進制表示:"+Integer.toBinaryString(1));
        System.out.println();
        System.out.println("長整型 -1 的二進制表示:"+Long.toBinaryString(-1L));
        System.out.println("長整型  0 的二進制表示:"+Long.toBinaryString(0L));
        System.out.println("長整型  1 的二進制表示:"+Long.toBinaryString(1L));

        //ToDo Boolean Byte Short Float Double 都沒有 toBinaryString 方法
    }

 

整數 -1 的二進制表示:11111111111111111111111111111111
整數  0 的二進制表示:0
整數  1 的二進制表示:1

長整型 -1 的二進制表示:1111111111111111111111111111111111111111111111111111111111111111
長整型  0 的二進制表示:0
長整型  1 的二進制表示:1

Process finished with exit code 0
相關文章
相關標籤/搜索