天天看點

優化查表法c語言,第07天C語言(16):進制查表法-優化

#pragma mark 進制查表法-優化 ###pragma mark 概念

###pragma mark 代碼

#include

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

}