算法思想:

在对于10转其他进制可以利用短除法的思想,将10进制数转换成其他进制数。,如下图所示,x为进制,num为十进制数

1、10进制转16进制主体部分

void DecToHex(int num)       //10进制转16进制
{char str[N];int i = 0, index;while (num){index = num % 16;if (index < 9)str[i] = index + '0';elsestr[i] = index-10 + 'a';num /= 16;i++;}str[i] = 0;reverse_str(str, i);       //将字符串逆序fputs(str, stdout);
}

2、10进制转2进制主体部分

void DecToBin(int num)       //10进制转2进制
{int i = 0, index;char str[N];while (num){index = num % 2;str[i] = index + '0';num /= 2;i++;}str[i] = 0;reverse_str(str, i);      //将字符串逆序fputs(str, stdout);
}

3、2进制转10进制主体部分

用num表示当前取到对应十进制数的个位,在每次取num之前需要将存放结果的变量result乘2,最后加上个位数num,每趟循环读取字符串中的字符时都执行这三步,最后result就是结果值。

int BinToDec(char* str)
{int i = 0,num,result=0;while (str[i]&&str[i]!='\n'){result <<=1;       //左移1位,相当于*2num = str[i] - '0';result += num;i++;}return result;
}

4、16进制转10进制主体部分

用num表示当前取到对应十进制数的个位,在每次取num之前需要将存放结果的变量result乘16,最后加上个位数num,每趟循环读取字符串中的字符时都执行这三步,最后result就是结果值。

int HexToDec(char* str)
{int i = 0, num, result = 0;while (str[i] && str[i] != '\n'){result <<= 4;      //左移4位,相当于*16if (str[i] >= 'a')num = str[i] - 'a' + 10;elsenum = str[i] - '0';result += num;i++;}return result;
}

完整代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 20
void reverse_str(char* str, int len);       //数组逆序
void DecToHex(int num);     //10转16
void DecToBin(int num);     //10转2
int BinToDec(char* str);    //2转10
int HexToDec(char* str);    //16转10int main(void)
{//int num;//printf("输入10进制数为:");//scanf("%d", &num);//printf("10进制数%d在16进制下为:",num);//DecToHex(num);//printf("\n");//printf("10进制数%d在2进制下为:", num);//DecToBin(num);//printf("\n");char str[N];printf("输入二进制数为:");fgets(str, sizeof(str), stdin);BinToDec(str);printf("转换成十进制数为:%d\n", BinToDec(str));memset(str, 0, sizeof(str));       //清0printf("输入十六进制数为:");fgets(str, sizeof(str), stdin);HexToDec(str);printf("转换成十进制数为:%d\n", HexToDec(str));system("pause");return 0;
}void DecToHex(int num)     //10进制转16进制
{char str[N];int i = 0, index;while (num){index = num % 16;if (index < 9)str[i] = index + '0';elsestr[i] = index-10 + 'a';num /= 16;i++;}str[i] = 0;reverse_str(str, i);       //将字符串逆序fputs(str, stdout);
}void DecToBin(int num)     //10进制转2进制
{int i = 0, index;char str[N];while (num){index = num % 2;str[i] = index + '0';num /= 2;i++;}str[i] = 0;reverse_str(str, i);      //将字符串逆序fputs(str, stdout);
}int BinToDec(char* str)
{int i = 0,num,result=0;while (str[i]&&str[i]!='\n'){result <<=1;       //左移1位,相当于*2num = str[i] - '0';result += num;i++;}return result;
}int HexToDec(char* str)
{int i = 0, num, result = 0;while (str[i] && str[i] != '\n'){result <<= 4;      //左移4位,相当于*16if (str[i] >= 'a')num = str[i] - 'a' + 10;elsenum = str[i] - '0';result += num;i++;}return result;
}void reverse_str(char* str, int len)
{int low = 0, high = len - 1;while (low < high){char temp = str[low];str[low] = str[high];str[high] = temp;low++;high--;}
}

案例运行效果:


29.【C语言】进制转换:10转16、10转2、2转10、16转10(Demo)相关推荐

  1. c语言进制转换pdf下载,C语言实现任意进制转换.doc

    C语言实现任意进制转换.doc includestdio.h#includemath.h#includestring.hvoid dtox(double num,int jz)char xnum100 ...

  2. 学习笔记7-C语言-进制转换、原返补、位运算、函数

    进制转换 为什么要使用二.八进制.十六进制?因为现在的CPU只能识别高低两种电流,因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别,但不方便人们书写.记录,所以把二进制数据转换成八进制是 ...

  3. c语言进制转换实验报告,c语言_各种进制转换.docx

    c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...

  4. 数据结构c语言进制转换八进制,C语言数据结构中数制转换实例代码

    C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以 ...

  5. C语言 进制转换(1-16进制)

    先输入需要转化的进制,再输入若干个需要转化的数(以0和负数结尾) 具体代码如下 #include <stdio.h> int main( ) { int n,m;int i, a[12]; ...

  6. 进制转换小数c语言代码,C语言进制转换小数负数皆可 代码求解释

    满意答案 #include void fun1(long a)//输出二进制数 { long p; if(a>0) { p=a%2;//取余 fun1(a/2);//递归取余 printf(&q ...

  7. c语言进制转换pdf下载,C语言 十六进制和十进制间的转换.pdf

    1.将十六进制转换为十进制. #include #include int main(void){ int convert(int,char *); int i,j ; char m[20]; prin ...

  8. C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)

    文章目录 解析(char a = 0x81) 注意 解析(int b = 0x81) 解析(char c = -12) 懵逼

  9. c# .net 16进制转换10进制

    业务调用 #region C#十六进制字符串转十进制 { Console.WriteLine("-----------十六进制字符串转十进制---------");//H:十六进制 ...

  10. (二) 数据存储_进制转换_编码_字节

    文章目录 数据如何存储到计算机? 寄存器 高速缓冲存储器(Cache) 内存 硬盘 进制转换 [1] 十进制->二进制 [2] 二进制->十进制 [3] 十进制->八进制 [4] 八 ...

最新文章

  1. stg游戏c语言,坦克大战改版
  2. Bzoj 2064 分裂 题解
  3. MATLAB 的条件分支语句
  4. SQL SERVER 2008查看sql执行的时间
  5. vector机器人 WHAT DO I USE THE VECTOR APP FOR? 我使用 VECTOR 应用程序做什么?
  6. python 正则search 所有_python之路----正则re(search,match,findall……)
  7. 思维、视角、设计丨产品经理的三板斧
  8. session mysql登录实现_PHP+MYSQL+MYSQL+SESSION实现用户登录的实例
  9. 【海报设计灵感】潮翻天的波普艺术海报设计
  10. 北上广深杭程序员买房姿势图鉴
  11. 结尾匹配_2.nginx的server_name匹配顺序
  12. Android开发实战使用(VR技术实现360°全景视频播放功能)
  13. adb 切换默认桌面_android tv 模拟器默认桌面修改 Alternate Launcher开机自动启动app...
  14. Eclipse下载安装配置测试(超详细)
  15. maven怎么强制updating_maven异常:Updating Maven Project 的统一解决方案
  16. 美的程序不可能从修修补补中来。它必须完美的把握住事物的本质,否则就会有许许多多无法修补的特例(转)...
  17. 【TcaplusDBx黎明觉醒】一路相伴,不负期待
  18. arm64_linux head.S的执行流程(3.18)- 12.msm8996 地址空间布局
  19. 【my eclipse tips】Could not create the view: An unexpected exception was thrown问题
  20. 相机标定(基础)20221204

热门文章

  1. 火狐可以打开谷歌打不开_如何设置Firefox以使用Google Apps打开所有内容
  2. 读书笔记——Neo4j实战 Cypher查询语言
  3. 并行算法笔记(一)——性能测评
  4. python学习之多进程小练笔:简版多进程文件夹copy器
  5. ## Virtualbox连内网后,宿主机可以直接访问内网的设置
  6. 亚马逊跨境电商如何编辑产品详情页 亚马逊产品listing优化
  7. proteus仿真arduino控制两位数码管
  8. 十二款世界顶级杀毒软件下载,有序列号全可免费升级
  9. 【编解码】从零开始写H264解码器(4) 熵编码之指数哥伦布编码
  10. 在磨金石学习多久可以做兼职?靠谱吗?