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