29.【C语言】进制转换:10转16、10转2、2转10、16转10(Demo)
算法思想:
在对于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)相关推荐
- c语言进制转换pdf下载,C语言实现任意进制转换.doc
C语言实现任意进制转换.doc includestdio.h#includemath.h#includestring.hvoid dtox(double num,int jz)char xnum100 ...
- 学习笔记7-C语言-进制转换、原返补、位运算、函数
进制转换 为什么要使用二.八进制.十六进制?因为现在的CPU只能识别高低两种电流,因此只能对二进制数据进行运算二进制数据虽然可以直接被cpu识别,但不方便人们书写.记录,所以把二进制数据转换成八进制是 ...
- c语言进制转换实验报告,c语言_各种进制转换.docx
c语言_各种进制转换.docx c 语言 各种进制转换 计算机中常用的数的进制主要有二进制.八进制.十六进制. 2 进制,用两个阿拉伯数字0.1: 8 进制,用八个阿拉伯数字0.1.2.3.4.5.6 ...
- 数据结构c语言进制转换八进制,C语言数据结构中数制转换实例代码
C语言数据结构中数制转换实例代码 数制转换是严蔚敏的数据结构那本书中的例子,但是那本书中的例子大都是用伪代码的形式写的,不是很容易理解和实现,对初学者造成了不小的困扰,在这里我们将其详尽的实现出来,以 ...
- C语言 进制转换(1-16进制)
先输入需要转化的进制,再输入若干个需要转化的数(以0和负数结尾) 具体代码如下 #include <stdio.h> int main( ) { int n,m;int i, a[12]; ...
- 进制转换小数c语言代码,C语言进制转换小数负数皆可 代码求解释
满意答案 #include void fun1(long a)//输出二进制数 { long p; if(a>0) { p=a%2;//取余 fun1(a/2);//递归取余 printf(&q ...
- c语言进制转换pdf下载,C语言 十六进制和十进制间的转换.pdf
1.将十六进制转换为十进制. #include #include int main(void){ int convert(int,char *); int i,j ; char m[20]; prin ...
- C语言进制转换时自动扩展位?(原码、反码、补码)(打印%o、%x时会自动扩展到32位【负数先得到其十进制真实数值,再根据其真实数值得到八进制、十进制补码】)
文章目录 解析(char a = 0x81) 注意 解析(int b = 0x81) 解析(char c = -12) 懵逼
- c# .net 16进制转换10进制
业务调用 #region C#十六进制字符串转十进制 { Console.WriteLine("-----------十六进制字符串转十进制---------");//H:十六进制 ...
- (二) 数据存储_进制转换_编码_字节
文章目录 数据如何存储到计算机? 寄存器 高速缓冲存储器(Cache) 内存 硬盘 进制转换 [1] 十进制->二进制 [2] 二进制->十进制 [3] 十进制->八进制 [4] 八 ...
最新文章
- stg游戏c语言,坦克大战改版
- Bzoj 2064 分裂 题解
- MATLAB 的条件分支语句
- SQL SERVER 2008查看sql执行的时间
- vector机器人 WHAT DO I USE THE VECTOR APP FOR? 我使用 VECTOR 应用程序做什么?
- python 正则search 所有_python之路----正则re(search,match,findall……)
- 思维、视角、设计丨产品经理的三板斧
- session mysql登录实现_PHP+MYSQL+MYSQL+SESSION实现用户登录的实例
- 【海报设计灵感】潮翻天的波普艺术海报设计
- 北上广深杭程序员买房姿势图鉴
- 结尾匹配_2.nginx的server_name匹配顺序
- Android开发实战使用(VR技术实现360°全景视频播放功能)
- adb 切换默认桌面_android tv 模拟器默认桌面修改 Alternate Launcher开机自动启动app...
- Eclipse下载安装配置测试(超详细)
- maven怎么强制updating_maven异常:Updating Maven Project 的统一解决方案
- 美的程序不可能从修修补补中来。它必须完美的把握住事物的本质,否则就会有许许多多无法修补的特例(转)...
- 【TcaplusDBx黎明觉醒】一路相伴,不负期待
- arm64_linux head.S的执行流程(3.18)- 12.msm8996 地址空间布局
- 【my eclipse tips】Could not create the view: An unexpected exception was thrown问题
- 相机标定(基础)20221204
热门文章
- 火狐可以打开谷歌打不开_如何设置Firefox以使用Google Apps打开所有内容
- 读书笔记——Neo4j实战 Cypher查询语言
- 并行算法笔记(一)——性能测评
- python学习之多进程小练笔:简版多进程文件夹copy器
- ## Virtualbox连内网后,宿主机可以直接访问内网的设置
- 亚马逊跨境电商如何编辑产品详情页 亚马逊产品listing优化
- proteus仿真arduino控制两位数码管
- 十二款世界顶级杀毒软件下载,有序列号全可免费升级
- 【编解码】从零开始写H264解码器(4) 熵编码之指数哥伦布编码
- 在磨金石学习多久可以做兼职?靠谱吗?