黑马程序员技术交流社区
标题:
十进制转二进制、八进制、十六进制
[打印本页]
作者:
jinlong129
时间:
2015-9-1 22:02
标题:
十进制转二进制、八进制、十六进制
//
// main.c
// 十进制转二进制、八进制、十六进制
//
// Created by king on 15/9/1.
// Copyright (c) 2015年 king. All rights reserved.
//
#include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num);
int main(int argc, const char * argv[]) {
// ptintBinary(10);
// printfOct(10);
printfHex(10);
return 0;
}
/**
* 转16进制
*
* @param num 需要转换的数值
*/
void printfHex(int num)
{
total(num, 15, 4);
}
/**
* 转八进制
*
* @param num 需要转换的数值
*/
void printfOct(int num)
{
total(num, 7, 3);
}
/**
* 转二进制
*
* @param num 需要转换的数值
*/
void ptintBinary(int num)
{
total(num, 1, 1);
}
/**
* 转换所有的进制
*
* @param value 需要转换的数值
* @param base 需要&上的数
* @param offset 需要右移的位数
*/
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
// 2.定义一个数组, 用于保存查询后的结果
char results[32] = {'0'};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[0]);
while (value != 0) {
// 1.取出1位的值
int res = value & base;// 1 7 15
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> offset;// 1 3 4
}
// 4.打印结果
for (int i = pos; i < 32; i++) {
printf("%c", results[i]);
}
printf("\n");
}
复制代码
作者:
GodLovenan
时间:
2015-9-1 22:03
好有心,加油,同学
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2