浅谈进制的转换

本文创作灵感来自CSDN@咸鱼WCY 的

咸鱼小白学嵌入式之C语言(2.进制)

博主更完就没更了,决定书接上回(喜


进制是个啥

要理解进制,首先哈,咱得知道不同进制的含义

说到底,各个进制其实有点像在用不同姿势表示一个数,也就是一个数的不同表示方式

再详细一些,就是逢几进1

 

比如十进制,就是逢十进一

那我们数数时,就是这样的:

1  2  3  4  5  6  7  8  9

可是这时候,再数就≥10了,怎么办呢?进一就好了,变成10。也就是十位+1,个位清零。

接下来,就可以再次从个位加起,再进十位,十位到9了还要加一,就会诞生百位……以此类推

那这种思维我们依葫芦画瓢到二进制,又是怎么样呢?

二进制就是逢二进一,所以每当数≥2时,就要进位。

我们从一开始吧。

下一个,1+1≥2了,那就要进一,十位+1,个位清零,得什么?

对了,10

但是此时我们一般不读这个为“十”,一般念“一零”,因为此处的10表示的和十进制的“十”就不一样了,它其实表示十进制的“二”

这是一个很重要的概念,不要拿十进制的思想套到二进制上,因为不同进制之间极有可能是同形异义

其它进制的话这样表示也是很好理解的,要注意的是16进制。

16进制是逢16进一,那就得表示出10 11 12 13 14 15啊!

于是,就有了ABCDEF。。。

不得不说,简单粗暴我喜欢

进制写法

一般来说,我们这样表示不同进制数

二进制:()B

八进制:()O

十进制:()D

十六进制:()H

填数即可

后面的字母是对应进制的缩写,不用管

比如二进制11,就可以写作11B

 

也有更简单的方法,(数)进制数  这样写

比如二进制11写作  (11)2

(一般进制数写得小一些,在括号右下角)

 

在计算机里,常用的十六进制也可能写作数加上前缀 0x (注意是阿拉伯数字0,不是o!)

 

进制的转换

就像美元和人民币一样,总得流通吧

所以,各个进制之间也总要转换的啊

依旧以十进制为标准,易得

 

c757e9ce3e414ea289adf5fbbef77d41.jpg

这样就很好理解了

 

可是,进制转换总不能要转换就从1开始写吧,要是要求转换10086D为二进制,那不得写死了??!

所以,从本质出发,我们需要一种计算方式来转换进制

这件事嘛,还得分两段说

十进制转n进制

这个还是比较好理解,也是比较常用的,用短除法。

短除法是十进制转换经典方法,原理如下,不想看可以跳下一个标题

短除法转换进制的原理

这个短除法还是基于二进制的原理实现的

二进制是逢二进一嘛,

短除法把十进制数除以二,相当于二进制进了一位,余数就是进位后的数,以此类推,最后除的余数必定是最高位的二进制数,所以就倒序写。

说到底就是十进制数除以2,相当于二进制数进了一位

(其实我也是一知半解,不知怎么解释)

短除法

咱假设要转换的数是20D

 

b52882ca77df44e2a02ba2756b36fed4.jpg 

 从下往上读余数,是10100,所以20D

=10100B

毫无技术含量可言 :D

(也不知是哪个人二进制题10题只对6题)

n进制转十进制

这个是比较重要的一个方法,相比短除法也难一些

理解这个之前,要了解一个重要的知识点。

基数和位权都是啥?

先不谈n进制,先看十进制

一个数,假设是456,那么我们就可以知道这里是有4个100,5个10,6个1

这应该是幼儿园知识了哈,我们略过

那么100 10 1 有什么关系呢?

前提条件,在10进制,所以我们需要探究它和10有什么关系。

不难发现,100=10^2,10=10^1,1=10^0,由个位开始指数从0开始依次连续加一

那再带入式子,得到

456D =4×10^2 + 5×10^1 + 6×10^0

这就是大名鼎鼎的——位权展开式

此处以一个字母式为例

(ABC)n=A×n^2+B×n^1+C×n^0

A,B,C分别就是基数,也就是基本的数,任何花样都以此进行

而n的若干次方就是对应的位权,平时不这么写的时候,可以理解为百位十位个位它们的区别

 

那么再次看看其他进制吧~

举例10100B,等于什么?

对,10100B=1×2^4 + 0×2^3 + 1×2^2 + 0×2^1 + 0×2^0

也可以直接化简为10100B=1×2^4 + 1×2^2

位权展开式可以干啥?

那现在知道了位权展开式,怎么用来转换进制呢?

刚刚我们看的十进制和二进制的位权展开式,有什么特点?

可以发现在展开式中底数都是对应的进制数

这个发现就能很快推导出来,这个很大可能和进制有关系

10100B=1×2^4 + 1×2^2

简单计算出来,等于16+4=20

所以,10100B=20D

其他进制也可以这样做

简单的,可以自行理解

 

更加高级一点的转换

带小数的十进制转换n进制

这个比较麻烦一点,我们以13.625D转换二进制为例

1.拆离整数部分和小数部分

这里拆开得到13和0.625

2.转换整数部分

13的话可以看前面,得1101B

3.转换小数部分

重点来了!

怎么转换小数部分嘞

其实之前我经常直接把小数点移位,转换完再移回去,可是经常错,所以这样不对

因为转换完之后的位数又和原来可能不一样,转换完再移位很显然不对

所以要用一种方法

小数部分是0.625嘛,我们需要把它不断乘以需要转换到的进制数(此处是2),取整数部分提出来加入结果小数部分,再取小数部分继续乘,一直做到小数部分为0或者精度够了,如下

整数部分:1101B

 

0.625×2=1.25          1101.1B

0.25×2=0.5              1101.10B

0.5×2=1                   1101.101B

 

所以得出,13.625D=1101.101B

如果觉得很难,没关系,之前赛前培训也被这个整得快疯了(苦笑)主要是各种小数又是整数,乘又除的啊啊啊啊啊

 

带小数的n进制转十进制

这个其实更加简单一些,位权展开式照抄就行了啊

举例,1101.101B转换为十进制

这里需要连贯性,所以整数小数一起说吧

已知1101B=1×2^3 + 1×2^2 + 0×2^1+1×2^0=13

那么……小数部分会不会也可以改写成位权展开式呢?

当然可以!

我们继续往下,0-1=-1,所以,小数部分就是负数的次方

0.101等于 1×2^-1 + 0×2^-2 + 1×2^-3

计算一下就得0.5+0+0.125=0.625

补在整数部分13后面,得13.625

所以1101.101B=13.625D

这个比小数十进制转n进制简单点吧

hhh我个人感觉是


以上就是各个进制转换的知识了,作为无聊的木子2024年的第一篇文章,可能知识点过于简单,文笔也不尽生疏,接下来木子会继续努力,更新更优质的文章

 

2024.02.13 在手机上敲打了一上午

 

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

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

相关文章

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目,在纠结一个注册中心是在双活机房都准备一个,那主机房的数据如果传过去呢,查了一些资料,最终在官网查到了一个NacosSync 的组件,主要用来做数据传输的,并且支持在线替换注册中心的&a…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S…

springsecurity6使用

spring security 中的类 : AuthenticationManager : 实现类:ProviderManager 管理很多的 provider ,,, 经常使用的,DaoAuthenticationProvider , 这个要设置一个 UserDetailService , 查找数据库&#xff…

生存类游戏《幻兽帕鲁》从部署服务器到开始体验全过程

SteamDB数据显示,《幻兽帕鲁》上线24小时内,在线人数峰值便突破200万,跻身Steam历史排行榜第二位。随着热度进一步发酵,《幻兽帕鲁》官方发布推文称,游戏发售不到6天,销量已经突破了 800万份。欢迎大家在阿…

‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

遇到 vue-cli-service 不是内部或外部命令,也不是可运行的程序或批处理文件。 的错误时,通常意味着Vue CLI没有被正确安装或配置在项目中。这可能是因为node_modules目录缺失了必要的包,或者局部安装的Vue CLI没有被正确设置到系统的PATH环境…

消息中间件面试篇

目录 消息中间件 RabbitMQ 消息不丢失 生产者确认机制 消息持久化 交换机持久化 队列持久化 消息持久化 消费者确认 消息重复消费 出现的场景 解决方案 每条消息设置一个唯一的标识id 幂等方案:【 分布式锁、数据库锁(悲观锁、乐观锁&#…

【教学类-48-04】202402013“天干地支 六十一甲子”.

背景需求: 2024年是甲辰龙年。 “辛亥革命”“甲午海战”"戊戌变法”都有天干地支的身影。 参观历史建筑,不少书法碑刻上都是用天干地支进行年代记名 所以我用Python来制作60一甲子的所有天干地支组合 60一甲子 天干地支的排序 作者:阿…

JavaScript中有哪些不同的数据类型

在 JavaScript 中,数据类型是一种用来表示数据的分类,它决定了我们可以对这个数据类型执行哪些操作。在 JavaScript 中有以下几种不同的数据类型: 基本数据类型 字符串 (String):表示一组字符,可以使用引号&#xff08…

理解JAVA EE设计模式

理解JAVA EE设计模式 在Web应用程序的设计和开发阶段,开发人员在开发类似的项目时可能会遇到相似的问题。每名开发人员可能会遇到的问题找出不同或相似的解决方案。但是,这导致一些时间和精力浪费在为相似的问题寻找解决方案上。因此,要啊节省时间和精力,需要记录常见问题…

VMware清理拖拽缓存 Ubuntu硬盘情况占用分析

这两天在尝试编译Linux源码,我在win上将源码下载下来然后复制到ubuntu上,这一步我粗略看到了三种方法:安装VM tools,就可以使文件正常的在win和ubuntu中复制剪切;使用scp命令将win和linux系统链接起来;使用…

柚见(伙伴匹配系统)第三期

后端整合SwaggerKnife4j 什么是接口文档 什么是接口文档? 写接口信息的文档, 每条接口包括: 请求参数响应参数错误码接口地址接口名称请求类型请求格式备注 who 谁用? 一般是后端或者负责人来提供,后端和前端都要使用…

Android---PermissionX实现动态权限申请

Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 PermissionX是一个扩展Android库,使Android运行时权限请求变得极其容易。你可以将它用于基本的…

ONLYOFFICE文档8.0新功能浅探

ONLYOFFICE文档8.0新功能浅探 上个月末这个月初的几天,ONLYOFFICE版本更新了!更新到了一个比较整的大的版本号,8.0版本,看来这个生产力工具的升级速度基本上能保持每年两个版本号的速度,还是很快的,一般来…

JavaScript 的点击劫持(Clickjacking)

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 点击劫持是一种恶意攻击,攻击者会在用户不知情的情况下诱…

在面试中如何回复擅长vue还是react

当面试官问及这个问题的时候,我们需要思考面试官是否是在乎你是掌握vue还是react吗??? 在大前端的一个环境下,当前又有AI人工智能的加持辅助,我们是不是要去思考企业在进行前端岗位人员需求的时候&#xf…

【JavaEE】_传输层协议UDP与TCP

目录 1. 开发中常见的数据组织格式 1.1 XML 1.2 JSON 1.3 Protobuf 2. 端口号 3. UDP协议 4. TCP协议 4.1 特点 4.2 TCP报文格式 4.3 TCP可靠性机制 4.3.1 确认应答机制 4.3.2 超时重传机制 4.3.2.1 丢包的两种情况 4.3.2.2 重传时间 4.3.3 连接管理机制 4.3.3…

HiveQL——不借助任何外表,产生连续数值

注:参考文章: HiveSql一天一个小技巧:如何不借助其他任何外表,产生连续数值_hive生成连续数字-CSDN博客文章浏览阅读1.3k次。0 需求描述输出结果如下所示:12345...1001 问题分析方法一:起始值(…

算法沉淀——链表(leetcode真题剖析)

算法沉淀——链表 01.两数相加02.两两交换链表中的节点03.重排链表04.合并 K 个升序链表05.K个一组翻转链表 链表常用技巧 1、画图->直观形象、便于理解 2、引入虚拟"头节点" 3、要学会定义辅助节点(比如双向链表的节点插入) 4、快慢双指针…

JUnit实践教程——Java的单元测试框架

前言 大家好,我是chowley,最近在学单元测试框架——JUnit,写个博客记录一下! 在软件开发中,单元测试是确保代码质量和稳定性的重要手段之一。JUnit作为Java领域最流行的单元测试框架,为开发人员提供了简单…

阿里云服务器centos_7_9_x64位,3台,搭建k8s集群

目录 1.环境信息 2.搭建过程 2.1 安装Docker源 2.2 安装Docker 2.3 安装kubeadm,kubelet和kubectl 2.4 部署Kubernetes Master(node1) 2.5 安装Pod网络插件(CNI) 2.6 加入Kubernetes Node 2.7 测试kubernetes集群 3.部署 Dashboard…