您的位置:首页 > 编程语言 > C语言/C++

第07天C语言(16):进制查表法-优化

2017-07-03 00:00 274 查看
#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语言