`
天使的左手
  • 浏览: 55616 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

进制转换和移位操作(移位-1)

    博客分类:
  • java
阅读更多
final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };

/**
     * 进制转换(查表法)
     * @param 待转换的10进制数
     * @param shift 每次移位数
     * @return 转换为对应进制的字符串
     */
    static String trans(long i, int shift) {
        char[] chs = new char[64]; //long类型数据占64个字节,定义一个一样大小的字符数组
        int pos = 64;  //因为每次都是移掉最后的shift位,
                       //所以查到的字符也是从字符数组最后一个位置开始存储
        int radix = 1 << shift; //基数 比如十进制转二进制shift为1 得到的基数是2 其他进制类推
        int mask = radix - 1; //掩码 为基数-1
                              //比如十进制(15)转八进制 每次将待转的十进制数(15)向右移掉3位
                              //八进制对应的基数是8 掩码是7
                              //第一次(二进制表示15)
                              //15: 1111
                              // 7:  111 掩码
                              //     111 查表得 '7'
                              //向右移掉3位,得到1
                              //第二次:
                              //1: 001
                              //7: 111
                              //     1 查表得 '1'
                              //此时结束循环 得到最终的结果"17"
        do {
            chs[--pos] = digits[(int)(i & mask)];
            i >>>= shift;
        } while(i != 0); //当前结果不为0 循环继续
        
        return new String(chs, pos, 64-pos);
    }
    

    //这也是将十进制转为2进制的一种方法
    public static void toBinary(long val) {
        long x = val / 2;
        long y = val % 2;
        if(x != 0)
            toBinary(x);
        System.out.print(y);
    }
    
    //十进制转2进制 每次移动1位
    public static String toBinaryString(long l) {
        return trans(l, 1);
    }
    
    //十进制转8进制 每次移动3位
    public static String toOctalString(long l) {
        return trans(l, 3);
    }
    
    //十进制转16进制 每次移动4位
    public static String toHexString(long l) {
        return trans(l, 4);
    }
    
    
    /**
     * -1 >>> -1
     * -1向右移位(无符号)-1结果?
     * 
     * -1 >>> 31
     * -1向右移位(无符号)31 结果是1
     * 
     * -1 >>> 32
     *  计算过程
     *  32 & 31 = 0 向右移动0位 结果仍为-1
     *  
     *  -1 >>> -1
     *  -1 & 31 = 31 向右移动31位 结果为1
     */
分享到:
评论

相关推荐

    C++ 2,8,10,16进制转换代码(Convert)

    总的来说,C++中的进制转换涉及到数学、位运算、字符串操作和标准库的使用。熟练掌握这些方法,能够帮助开发者在处理各种进制转换问题时游刃有余。在实际编写代码时,可以根据具体需求选择合适的方法,同时注意数据...

    SystemChange(c语言移位操作实现的10进制到16进制和2进制的转换)

    总结来说,C语言的移位操作在进行二进制和十六进制转换时起着关键作用,它可以提高算法的效率,使得程序执行更快。通过熟练掌握位移操作,程序员可以更好地理解和处理二进制数据,这对于理解底层计算机原理以及编写...

    进制转换工具软件-V1.7

    RGB值是颜色的一种表示方式,由红色、绿色和蓝色三个分量组成,每个分量取值范围为0到255,对应十进制的0到2^8-1。十六进制颜色值则是RGB值的另一种表达形式,每个分量用两位十六进制数表示,范围从00到FF。软件的...

    进制转换 16进制转换成10进制 移位的方法实现

    通过移位的方法把16进制的字符串转换为10进制的字符串

    单片机进制转换

    1. 数据存储:单片机内存中的数据都是二进制表示,读取和写入时需要进行进制转换。 2. 编程逻辑:在编写条件判断、循环等逻辑时,常需将进制数转换为十进制进行比较。 3. 通信协议:在串口通信、网络协议中,数据...

    二进制、十进制、十六进制转换工具 V1.5【终极版】

    本软件“二进制、十进制、十六进制转换工具 V1.5【终极版】”是一个基于MFC(Microsoft Foundation Classes)界面库开发的实用程序,它提供了便捷的转换功能,能够帮助用户轻松地在这些数制之间进行转换,同时包含了...

    移位密码和仿射密码、进制转换、s盒

    加密公式为:C = (a * P + b) mod m,解密公式为:P = (a^(-1) * (C - b)) mod m,其中P是明文,C是密文,m是字符集的大小。这种密码比移位密码更难破译,但依然存在线性结构,可能被频率分析等攻击手段破解。 接...

    IEEE 745标准的32位二进制浮点数与十进制浮点数转换代码C#

    - 开始时,将十进制数转换为科学记数法,即一个介于1和2之间的数字乘以10的幂。 - 分别将基数和指数转换为二进制:基数可以通过乘2取余的方式,指数可以通过位移操作。 - 如果指数是负数,需要将尾数的二进制表示...

    单片机16进制转10进制数

    1. **初始化**:首先,程序将需要转换的16进制数加载到寄存器R0和R1中。 2. **调用子程序**:接下来,通过`CALL HEX2BCD`指令调用一个名为`HEX2BCD`的子程序来进行转换工作。 3. **BCD转换**:子程序`HEX2BCD`的...

    32位汇编语言 十六进制与十进制转换

    进行进制转换时,我们通常会用到算术运算和移位操作。 十六进制转十进制的过程一般涉及乘法和加法。例如,将十六进制数ABCD转换为十进制,可以逐位乘以16的相应幂次并累加。而在汇编中,这可能涉及到多次乘法和加法...

    二进制数和十进制数相互转换 汇编课程设计

    反之,将十进制转换为二进制则常用的方法有短除法或扩展的二进制除法。 在汇编语言中实现这种转换需要编写一系列指令来执行这些计算。"convert.asm"文件很可能是这个转换程序的源代码。汇编语言程序由指令组成,每...

    C#浮点数和16进制字节数互相转换

    在实际应用中,还可以自定义函数实现这些转换,例如,使用位操作或移位运算来处理二进制数据。这有助于理解底层原理,但通常情况下,`BitConverter`已经提供了足够的功能。 在处理16进制字符串时,确保字符串符合...

    S7-1200 移位循环移位指令-跟我学 FLASH视频.rar

    1. **数据编码与解码**:通过位移,可以实现二进制数据的编码和解码,比如ASCII码的转换。 2. **位逻辑操作**:配合AND、OR、NOT、XOR等位逻辑指令,可以进行复杂的位运算,例如设置或清除特定位,检查某个位的状态...

    10进制与16进制浮点数转换

    3. **16进制到10进制的转换**:相反的过程,16进制的浮点数转换为10进制,需要对整数和小数部分进行逆向操作。整数部分直接转换,小数部分通过除以16的幂次并累加结果。指数部分需要根据其符号和值进行相应的乘法或...

    进制转换,二进制,十进制,十六进制,bit转换工具

    原创软件,MFC界面,可以任意转换64bit数据到2进制、10进制、16进制,2进制可以直接查看任意bit,取0~63之间的任意区间值,并且支持取位、移位大小端转换等等,尤其适合做嵌入式开发的相关人员使用。真正做到了简单...

    基于COM组件的进制转换器

    在实际的开发过程中,为了提高效率和正确性,进制转换器组件可能会使用位运算、移位操作和除法来实现。同时,考虑到错误处理和边界条件,例如输入超出范围或格式不正确,组件应该提供适当的异常处理机制。 总的来说...

    二进制、十进制、十六进制转换工具 V1.1

    原创软件,二进制、十进制、十六进制转换工具 V1.1 上一个版本的升级版,功能更强,实用性更强

    jisuanqi-.rar_数码管计算器_进制转换

    《51单片机数码管计算器与进制转换详解》 在电子工程和嵌入式系统设计中,...通过研究这个项目,不仅可以掌握单片机控制数码管和LED的方法,还能理解如何实现进制转换和基本运算,对提升电子设计和编程技能大有裨益。

    巧用移位法进行数制转换

    - 对每一组进行十进制转换,得到一个十进制数字。 - 将这个十进制数字编码为四位的BCD码。 - 重复以上步骤,直到所有二进制位都被处理完毕。 ### 四、移位法的优势 相比于传统的数学运算方法,移位法在数制转换中...

Global site tag (gtag.js) - Google Analytics