美文网首页十天学会C语言程序员
C语言day07-16进制查表法-优化

C语言day07-16进制查表法-优化

作者: liyuhong165 | 来源:发表于2016-05-01 00:28 被阅读50次

    pragma mark 进制查表法-优化

    pragma mark 概念

    pragma mark 代码

    #include <stdio.h>
    void printfBunary(int value);
    void total(int value,int base,int offset);
    
    void printfBunary(int num);
    void printOct(int num);
    void total(num, 15, 4);
    int main()
    {
        printHex(20);
        return 0;
    }
    void printHex(int num)
    {
        
        total(num, 15, 4);
    }
    void printOct(int num)
    {
        total(num, 7, 3);
    }
    
    void printfBunary(int num)
    {
        total(num, 1, 1);
    }
    // 转换所有的进制
    // value也就是需要转换的数组
    // base就是需要&上得数
    // offset就是需要右移的位数
    void total(int value,int base,int offset)
    {
        // 1.定义一个数组,用于保存十六进制中所有的取值
        // 规律:取出的4个二进制位得到的值,正好是数组中角标对应的值
        char charValue[] = {'0','1','2','3','4','5','6','7','8',
            '9','a','b','c','d','e','f'};   // 表 装了是可能所有的取值
        char results[32] = {'0'};
        int pos = sizeof(results)/sizeof(results[0]);
        
        while (value != 0) {
            // 取出4位的值
            int res = value & base; // 1、7、15
            // 利用这个值作为索引去数组中查询对应的十六进制的值
            char  c = charValue[res];
            //        printf("%c",c);
            // 将取出来的值防盗结果数组中
            results [--pos] = c;
            //        results[] = c;
            // 每取完一次,就干掉它最低的4位
            value = value >> offset; // 1、3、4
            //        printf("pos = %i",pos);
        }
        for (int i = pos; i < 8; i ++) {
            printf("%c",results[i]);
        }
        printf("\n");
    }
    
    
    

    相关文章

      网友评论

        本文标题:C语言day07-16进制查表法-优化

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