进制之间的转换——n进制转换为m进制(C/C++实现,简单易懂)

目录

🌈前言:

📁 什么是进制转换:

📁其他进制转换成十进制:

📂二进制( B ) ——> 十进制( D )

📂八进制( O ) ——> 十进制( D )

📂十六进制( H ) ——> 十进制( D )

📁十进制转换成其他进制

📁N进制转换成M进制:

📁代码展示:

📜总结:

 


🌈前言:

 102bed06058b4af39d745a810577c34e.jpeg

        不知道你平常遇到进制之间转换问题是否会头疼,博主我本人遇到进制转换问题非常头疼,不知所以云,上网上搜资料也是官话一堆,难以理解,但好在,经过我不断的努力,终于学会了,所以我写下这篇文章,希望能帮助更多像我这样的人。

        本篇文章是从零开始讲解进制,再用代码实现,如果你已经有了相关的知识储备,可以直接跳转到代码展示,本版本使用C++语言,但你并不需要担心,与C语言的不同只在于输入输出的形式(cin 写成scanf  cout写成printf即可)

24e1d0a2552d4beb9994ed7c0318c08f.gif


  • 📁 什么是进制转换:

        在日常生活中,我们处处用到进制,简单来说,进制就是计数的一种方法,比如我们数学问题,1+1这样简单的问题,他就是用10进制表示的;相信你也知道,在计算机中机器是用二进制来表示的,计算机底层就是一串串0和1组成的。

        这就涉及不同进制之间转换的问题了,如何将我们日常生活中用到的进制转换成另外一种进制呢。        


  • 📁其他进制转换成十进制:

        有人就发现了规律,按权相加法,这是一种将N进制转换成10进制的一种方法。所谓的劝就是“位权”,如果你不理解,就可以认为是位置拥有的权利,比如十进制的个位,十位,百位等等,这就是权,个位的权重是10^0(10的0次方),十位就是10^1意思类推。权重的指数是从0开始的,从右向左递增。

        按权相加,顾名思义,就是每一位×它的权重相加,得出来的数就是十进制数字。这里我们以二进制举例:

2501e97d2d23482bb17c7e9b6a92ba6d.png

  • 📂二进制( B ) ——> 十进制( D )

        上面你对权重有了了解,那我们来练练手吧。我们先从二进制开始。

1 (B) 的十进制表示为 =  1(D)

    1的权重是2^0,1 * 2^0 = 1

 

10(B)的十进制表示为 = 2(D)

    0的权重是2^0, 1的权重是2^1,结果 = 0 * 2^0 + 1 * 2^1 = 2;

 

11(B)的十进制表示为 = 3(D)

    左边第一个1的权重是2^0,右边1的权重是2^1, 结果 = 1 * 2^0 + 1 * 2^1 = 3;

        进过上面简单的计算,相信你一定会了简单的二进制转换为十进制,当然也别骄傲,后面还有小数位等着你,这一部分这篇文章就不做讲解了,如果感兴趣,可以度娘一下,或者评论区留言,我会进行答复。

 

  • 📂八进制( O ) ——> 十进制( D )

       首先,我们先来讲解一下,什么是八进制,八进制就是逢八进一,也就是说每一位最多的取值就是0~7区间内,若果等于8向进一位。

        接下来,我们来看一下八进制如何转换成十进制,有了二进制基础的你,相信一定不成问题。

7(O)转换成十进制 = 7(D)

    7的权重是8^0 , 结果 = 7 * 8^0 = 7;

 

10(O)转换成十进制 = 8(D) 

    0的权重是8^0,1的权重是8^1 , 结果 = 0 * 8^0 + 1* 8^1 = 9

 

17(O)转换成十进制 = 15 (D) 

 

  • 📂十六进制( H ) ——> 十进制( D )

        十六进制就是,逢十六进一。也就是说,每一位的取值是0~15区间内,但要注意的是,10~15不用数字表示,而是用A  B  C  D  E  F表示。当然并没有规定是用大写还是小写。

F(H)转换成十进制 = 15(D)

    F=15,结果 = 15 * 16^0 = 15;

 

1F(H)转换成十进制 = 31(D)

    结果 = 1 * 16^1 + 15 * 16^0 = 31;

        以上我们对不同进制转换成十进制有了一定的了解,接下来我们来看一下十进制如何转换成其他进制。


  • 📁十进制转换成其他进制

        这里就要介绍 “整数除以进制,直到不能相除,向上读取余数”,这里我们还是以十进制与二进制之间的转换为例,如下图。

f1a6fba7a41d44baad0cbba1825fd44b.png

        同样的道理,十进制转八进制,十六进制是一样的道理,只不过除数改为了8。


  • 📁N进制转换成M进制:

        可能有的同学一看到这里就很头痛了,我才刚刚学会十进制与其他进制的转换,其他进制之间的转换这对我太难了。其实这并不难,我们只要将N进制转换成我们所熟悉的十进制,再转换成M进制不就简单了吗。

        这里扩充一个点,作为中间的转换进制,并不一定是十进制,也可以是二进制,但为了简单,适合更多的同学,所以这里将延续上面的讲解,使用十进制作为中间进制。同样,下面的代码展示,我们也是使用十进制作为中间进制。


  • 📁代码展示:

input(输入):

 进制 n  

 进制为n的数

 进制 m

output(输出):

转换成进制为m的数

 

例如:

输入:16 

            F

           10

输出:15

        下面分批次介绍各个函数,先从主函数开始,最后展示完整代码。

//主函数
int main()
{int n, m, ten = 0;char num[100000] = { 0 };cin >> n;cin >> num;cin >> m;ten = N_To_Ten(num,n);char ans[100000] = { 0 };int k = Ten_To_M(num, ans,ten,m);//打印for (int i = k - 1;i >= 0;i--){cout << ans[i];}return 0;
}

        这里我们首先定义一个足够大的字符数组num,用来存放进制为n的数,我们在封装一个函数,将这个数组中的每个数转换成十进制数。其次在封装一个函数,将字符数组转换后的十进制数转换成M进制,存放到字符数组ans中。

        ten :十进制数

        k :ans中数据个数,即转化成m进制的数据后,这个数据有几位。

//n 进制 --> 10进制
int N_To_Ten(char num[],int n)
{int ten = 0;int k = 0;	//权重for (int i = strlen(num) - 1;i >= 0;i--, k++){if (num[i] >= 'A' && num[i] <= 'Z'){num[i] = num[i] - 'A' + 10;}else{num[i] = num[i] - '0';}ten = ten + num[i] * pow(n, k);}return ten;
}
//10进制 --> m进制
int Ten_To_M(char ans[],int ten,int m)
{int k = 0;while (ten != 0){int temp = ten % m;ten /= m;if (ten >= 10 && ten <= 15){ans[k++] = temp + 'A' - 10;}else{ans[k++] = temp + '0';}}return k;
}

        上面的内容最难理解可能就是 num[i] +- 'A'  +- 10了吧,这里讲解一下,这里就是+将字符'A'转换成整数,10,11等等,反之-就是将整数转换成字符A B C等等。这是针对十六进制进行的判断。

        同样的道理,+ - ‘0’也是如此。都是将字符转换成整数,整数转换成字符。例如八进制,二进制等。

 


  • 📜总结:

        以上我们便从零基础开始讲解,什么是进制,十进制如何转换成其他进制,其他进制如何转换成十进制,了解了N进制转换成M进制,就是现将N进制转换成十进制,十进制再转换成M进制。作为中间进制,不仅可以是十进制,也可以是二进制等等,你熟悉那种转换方法,觉得哪种用起来编程方便,就用那种即可。

        以上,我们边对进制之间的转换做了总结复习,如果你觉得有用,欢迎点赞收藏关注,也欢迎大家在评论区讨论交流,指出我的错误。

de36a573fb0f44b9b85867d7f1094080.gif

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

运维实践|采集MySQL数据出现many connection errors

文章目录 问题出现问题分析当前环境问题分析 解决方案1 检查调度事件任务是否开启2 开启调度事件任务3 创建一张日志表4 创建函数存储过程5 创建事件定时器6 开启事件调度任务7 检查核实是否创建 总结 问题出现 最近在做OGG结构化数据采集工作&#xff0c;在数据采集过程中&am…

抖音商品详情API接口在电商行业中的重要性及实时数据获取实现

随着移动互联网的快速发展&#xff0c;电商行业不断壮大。抖音作为一款短视频社交应用&#xff0c;近年来在电商领域取得了显著成果。本文将探讨抖音商品详情API接口在电商行业中的重要性&#xff0c;以及如何通过实时数据获取提高业务效率。我们将介绍相关的技术背景、API接口…

AngularJS

理解实现代码的逻辑为主要&#xff0c;代码怎么写为次要。 参考资料&#xff1a; 《AngularJS入门与进阶》&#xff0c;江荣波著 前端开发常用框架 React&#xff1a;由Facebook开发&#xff0c;用于构建用户界面的JavaScript库&#xff0c;以组件化和虚拟DOM著称。 Angular&…

2024最新FL Studio21.2MAC电脑版中文版下载安装步骤教程

FL Studio 简称FL&#xff0c;全称Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前最新版本是FL Studio21.1.1.3750版本&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破…

docker的资源限制及容器应用

一、docker资源限制 在使用 docker 运行容器时&#xff0c;一台主机上可能会运行几百个容器&#xff0c;这些容器虽然互相隔离&#xff0c;但是底层却使用着相同的 CPU、内存和磁盘资源。如果不对容器使用的资源进行限制&#xff0c;那么容器之间会互相影响&#xff0c;小的来说…

DC-5靶场

目录 DC-5靶机&#xff1a; 先进行主机发现&#xff1a; 发现文件包含&#xff1a; 上传一句话木马&#xff1a; 反弹shell&#xff1a; 提权漏洞利用&#xff1a; 下载exp&#xff1a; 第一个文件 libhax.c 第二个文件r…

电子电器架构( E/E) 演化 —— 大算力

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节…

PowerShell实战:Get-Content命令使用详解

目录 一、Get-Content介绍 二、语法格式 三、参数详解 四、使用案例 4.1 获取文件内容 4.2 获取文件前三行内容 4.3 获取文件最后三行内容 4.4通过管道方式获取最后两行内容 4.5使用逗号作为分隔符 4.6 Filter方式读取多个文件 4.7 Include方式读取多个文件 一、Get-Content介绍…

Oracle VM VirtualBox使用——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

简述&#xff1a; Oracle VM VirtualBox是一款开源虚拟机软件&#xff0c;由德国Innotek公司开发&#xff0c;后被Sun Microsystems公司收购&#xff0c;并最终被甲骨文公司收购。它支持在Windows、Mac OS X、Linux、OpenBSD、Solaris、IBM OS2甚至Android等操作系统上创建虚拟…

真正的软件测试常见的面试题,到底有哪些?

01、您所熟悉的测试用例设计方法都有哪些&#xff1f;请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 答&#xff1a;有黑盒和白盒两种测试种类&#xff0c;黑盒有等价类划分法&#xff0c;边界分析法&#xff0c;因果图法和错误猜测法。白盒有逻辑覆盖法&…

PostgreSQL的安装、配置与使用指南

文章目录 一、介绍二、安装1、下载安装2、验证 三、配置1、远程连接配置1&#xff09;配置postgresql.conf2&#xff09;配置pg_hba.conf3&#xff09;重启 2、配置数据库的日志 四、图形化界面1、pgAdmin2、Navicat 一、介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库…

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…

5.docker容器及相关命令

docker中的容器实际上就是宿主机中的一个进程 目录 1 创建并启动容器 docker run 1.1 如果没有指定的镜像的话&#xff0c;docker会尝试从源拉取 1.2 给容器起名字 --name 1.3 交互方式启动(-i)与弹出客户端(-t) 1.4 指定端口 -p 1.5 自动分配端口 -P 1.6 后台运…

element plus 日期范围 自定义内容

问题&#xff1a; 按照官网上的自定义内容示例&#xff0c;修改日期选择器没有问题&#xff0c;如果修改日期范围选择器&#xff0c;修改后会丢失日期范围选择时的样式。 解决&#xff1a; 从F12中不难看出日期范围的选择样式来自于.el-date-table-cell 而示例中写的是.cell&…

文件系统和软硬链接(下)

在这里我们首先学习两个新的知识点第一个&#xff1a; 第二个&#xff1a; 下面我们再来理解思考下面的四个问题&#xff1a; 我们首先来解决第一个问题如果新建一个文件Linux系统会做什么呢&#xff1f; 新建文件&#xff0c;系统会做什么 当我们要新建一个文件的时候&#…

Shell三剑客:sed(命令)二

一、插入命令&#xff1a;i&#xff08;之前&#xff09; [rootlocalhost ~]# sed -r 2i aaaaaaa passwd.txt root:x:0:0:root:/root:/bin/bash aaaaaaa bin:x:1:1:bin:/bin:/sbin/nologin[rootlocalhost ~]# sed -r 2i aaaaaaa\ > bbb\ > ccc passwd.txt root:x:0:0:r…

vue3中ref及reactive的说明

目录 1.响应式说明 2.vue3的ref及reactive的使用 3.reactive响应式失效问题 4.总结 1.响应式说明 vue的响应式是vue框架中的核心概念之一&#xff0c;它是指当数据发生变化时&#xff0c;vue能够自动更新视图。vue2的响应式是基于Object.defineProperty进行实现的。 当你把…

Spring Cloud:Eureka

目录 一、Eureka介绍 1.Eureka的作用 2.总结 二.搭建Eureka服务端步骤 1.导入maven依赖 2.编写启动类&#xff0c;添加EnableEurekaServer注解 3.添加application.yml文件&#xff0c;编写下面的配置&#xff1a; 三.注册Eureka客户端服务提供者&#xff08;user-servic…

【每日OJ—有效的括号(栈)】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 1、有效的括号题目&#xff1a; 1.1方法讲解&#xff1a; 1.2代码实现&#xff1a; 总结 前言 世上有两种耀眼的光芒&#xff0c;一种是正在升起的太阳&#…

系统架构设计师教程(五)软件工程基础知识

软件工程基础知识 5.1 软件工程5.1.1 软件工程定义5.1.2 软件过程模型5.1.3 敏捷模型敏捷开发的特点敏捷方法的核心思想主要敏捷方法简介 5.1.4 统一过程模型 (RUP)RUP的生命周期RUP中的核心概念RUP的特点 5.1.5 软件能力成熟度模型 5.2 需求工程5.2.1 需求获取需求获取的基本步…