博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)
阅读量:6110 次
发布时间:2019-06-21

本文共 24916 字,大约阅读时间需要 83 分钟。

前言:写  的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代码,以前也学习过左移、右移,无符号右移三类移位运算符,不过忘记了具体的变化规则,于是就实验了一把,便有了本篇博文。

 注:玩的是JDK1.7版本

一:先看结论

       1)<< 左移 将左操作数向左移动,无论做操作数是正还是负,都在低位补“0”

       2)>> 带符号的右移 将左操作数右移,如果左操作数是正数,则高位补“0”,如果左操作数是负数,则高位补“1”

       3)>>> 无符号右移,将左操作数右移,无论左操作数是正还是负,都在高位补“0”

 

二:再看代码

      代码中,我实验了极少一部分数据,不过也能达到我们实验的目的,这个如果有兴趣,可以自己玩一下,程序比较简单,调整下参数执行一下就一目了然!

/** * @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);        }    }}

 

三:结合代码运行的日志,回头再看结论(之所以,贴出程序执行日志,是因为通过执行日志能很好的理解移位操作的运算规则)

 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 的二进制表示:1Process finished with exit code 0

 

转载地址:http://zmkka.baihongyu.com/

你可能感兴趣的文章
小程序: 查看正在写的页面
查看>>
dedecms生成文档数据库崩溃 mysql daemon failed to start
查看>>
Linux的50个基本命令
查看>>
Objective-C中创建单例方法的步骤
查看>>
[转]无法安装MVC3,一直卡在vs10-kb2483190
查看>>
Codeforces 520B:Two Buttons(思维,好题)
查看>>
web框架-(二)Django基础
查看>>
Jenkins持续集成环境部署
查看>>
emoji等表情符号存mysql的方法
查看>>
Excel到R中的日期转换
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
linux文本模式和文本替换功能
查看>>
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>
Elasticsearch增删改查
查看>>
oracle归档日志增长过快处理方法
查看>>