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

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");
}


    原文作者:liyuhong165
    原文地址: https://www.jianshu.com/p/8d75692e4a44
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞