C 【进制查表法 求取给定十进制数的其他进制形式数值】
2016-04-12 00:11
751 查看
#include <stdio.h> void tenToTwo(int num); void tenToEight(int num); void tenToSixteen(int num); void change(int num, int base, int move); int main() { change(998, 15, 4); } void tenToTwo(int num) { change(num, 1, 1); } void tenToEight(int num) { change(num, 7, 3); } void tenToSixteen(int num) { change(num, 15, 4); } /** * 将十进制转化为其他进制的数值 * * @param num 需要转化的数值 * @param base 每次比较位数的规定值(二进制为1位,八进制为3位,十六进制为4位) * @param move 所需右移位数 */ void change(int num, int base, int move) { // 1.定义一个进制数组,用来保存所有的进制取值 char charValue[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; // 2.定义一个数组,用于保存转化之后的结果 char result[32] = {'0'}; // 3.pos变量是用来记下转化之后结果数组的索引的 int pos = sizeof(result) / sizeof(result[0]); while (num != 0) { // 不管是刚传进来的num为0还是说移位之后剩下的值为0,我们都不需要再判断了,只是多加了很多0而已 // ① 取出num的第一位数值,move决定多少位数表示一位数值,base是所有位均为1时的判定值 int res = num & base; // ② 在进制取值数组中取出对应元素(res正好对应进制数组下标) char c = charValue[res]; // ③ 由后向前存储获得 result[--pos] = c; // ④ 将num右移,目的为了删除我们已经截取的move位数值 num = num >> move; } // 4.输出计算后的结果(由于我们只是保存到pos这个索引处,所以说从pos开始遍历输出即可) for (int i = pos; i < sizeof(result) / sizeof(result[0]); i++) { printf("%c", result[i]); } printf("\n"); } /** 程序举例分析: (1)十进制数 998 转化为 十六进制 伪代码: 998 & base = 998 & 15 = 0011 1110 0110 & 1111 = 0110 = 6 char c = charValue[6] = '6' 998 >> 4 = 0011 1110 0011 1110 & 15 = 0011 1110 & 1111 = 1110 = 14 char c = charValue[14] = 'e' 0011 1110 >> 4 = 0011 = 3 char c = charValue[3] = '3' pos = 32 - 1 - 1 - 1 = 29 所以只需遍历 result[29],result[30],result[31] ---> 3e6 (2)十进制数 781 转化为 八进制 伪代码: 781 & base = 781 & 7 = 001 100 001 101 & 111 = 101 = 5 char c = charValue[5] = '5' 781 >> 3 = 001 100 001 001 100 001 & 7 = 001 100 001 001 100 001 & 111 = 001 = 1 char c = charValue[1] = '1' 001 100 001 >> 3 = 001 100 001 100 & 111 = 100 = 4 char c = charValue[4] = '4' 001 100 >> 3 = 001 001 & 111 = 001 = 1 char c = charValue[1] = '1' pos = 32 - 1 - 1 - 1 = 28 所以只需遍历 result[28],result[29],result[30],result[31] ---> 1415 */
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置