美文网首页
二进制,十进制转换,位运算

二进制,十进制转换,位运算

作者: 我姓杨却不是你信仰 | 来源:发表于2020-12-03 17:03 被阅读0次
    /**
     * 向左移位,相当于十进制数据转换成二进制,然后末尾添m位0
     * 计算结果证明,等于传入数字翻倍效果
     * 例53,左移1位后,变106
     * 左移两位,结果212,相当于53*2*2
     * 左移三位,结果424,相当于53*2*2*2
     *
     * 十进制53 转换为二进制 连续除2,若有余,记1。若整除,记0。
     * 例:
     * 53/2=26余1  记1
     * 26/2=13余0  记0
     * 13/2=6余1   记1
     * 6/2=3余0    记0
     * 3/2=1余1    记1
     * 1结束。     记1
     * 转换结果:110101
     * @param num
     * @param m
     * @return
     */
    public static int leftShift(int num,int m){
        num = num << m;
        return num;
    }
    
    /**
     * 向右移位,相当于十进制数据转换成二进制,然后舍去末尾m位
     *
     * 二进制110101 转十进制,底数为10
     * 如:
     * 1 | 1*2^5
     *   |    +
     * 1 |  1*2^4
     *   |    +
     * 0 |  0*2^3
     *   |    +
     * 1 |  1*2^2
     *   |    +
     * 0 |  0*2^1
     *   |    +
     * 1 |  1*2^0
     * 计算规则如下,为0的不加,1的相加。
     * 得53
     *
     * 右移一位,变成11010 按照上述规则 转换成十进制,得26 刚好是53/2的整数商
     * 右移两位  得13
     * 右移三位  得6
     * @param num
     * @param m
     * @return
     */
    public static int rightShift(int num,int m){
        num = num >> m;
        return num;
    }
    

    计算机为什么要使用二进制,这个跟系统的硬件实现有关系,组成计算机系统的逻辑电路通常只有两个逻辑,即开关的打开或关闭的状态。0为关闭,1为打开。即便系统受到一定的干扰,它也可以可靠的分辨出,数字0或者1。
    因此,在具体的系统实现中,二进制的数据表达有抗干扰,高可靠的优点。
    有个疑问,为什么不用十进制呢,可以更清楚的表达。
    那我解释下,假设底层使用十进制的话,那就需要判断10种状态,在后续业务繁杂的情况下,状态判断就会很艰难,出错的机率会变大。
    二进制也比较适合逻辑运算,比如真或者假。

    位的逻辑操作:

    1,“ 或 ”==" | "
    参与操作的位中,只要有一位是1,则为1。
    例:
    "1 1 0 1 0 1";

    "1 0 0 0 1 1";
    结果: "1 1 0 1 1 1";
    2,“ 与 ”==“ & ”
    参与操作的位中,只有全部是1,才为1。
    例:
    "1 1 0 1 0 1";

    "1 0 0 0 1 1";
    结果: "1 0 0 0 0 1";
    3,“ 异或 ”==“ ^ ”
    它具有排异性,就是说参与操作的位中,必须不相同才为1,不同则为0。两个相同的数值,按位异或结果为0,是相等的必要充分条件,
    例:
    "1 1 0 1 0 1";
    异或
    "1 1 0 1 0 1";
    结果:"0 0 0 0 0 0";

    相关文章

      网友评论

          本文标题:二进制,十进制转换,位运算

          本文链接:https://www.haomeiwen.com/subject/ekzmwktx.html