嵌入式-数据进制之间的转换

目录

一.简介

1.1十进制

1.2二进制

1.3八进制

1.4十六进制

二.进制转换

2.1二进制-十进制转换

2.2八进制-十进制转换

2.3十六进制-十进制转换

2.4十进制-二进制转换

2.5十进制-八进制转换

2.6十进制-十六进制转换

2.7小数部分转换


一.简介

    被传入到计算机的数据要转换成0,1的二进制数据才能被计算机识别。为了方便存储,我们将数据以进制的形式存储。

    进制也就是进位计数制,是人们规定的一种带进位的计数方法

    对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。例如十进制是逢十进一,二进制是逢二进一,十六进制是逢十六进一。

    常见的数据进制包括以下几种:

  1. 十进制。十进制数是指0、1、2、3、4、5、6、7、8、9共十个数字,每逢十进一。
  2. 二进制。二进制数是指0和1两个数码,每逢二进一。
  3. 八进制。八进制数是指0、1、2、3、4、5、6、7共八个数字,每逢八进一。
  4. 十六进制。十六进制数是指0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共十六个数字,每逢十六进一。

1.1十进制

    十进制(Decimal System)是一种计数方法,即满十进一,计数单位是101。

    十进制计数法是日常使用最多的计数方法,每相邻的两个计数单位之间的进率都为十,即10、100、1000、10000、100000、……,其计数单位为1、10、10^2、10^3、10^4、……,这些计数单位之间的进率都是10,即10^1=10、10^2=10×10=10^3、……、10^n=10×……×10=10^(n+1),以此类推。

    十进制计数法最早是由亚里士多德发现的,起因可能是因为人类有十根手指,所以每相邻的两个计数单位之间的进率都是十,这跟人类算数采用十进制可能有一定关系

1.2二进制

    二进制是由德国数理哲学大师莱布尼茨在1679年发明的,他在看了中国的《周易》之后受到启发发明了二进制,这也是今天电子计算机技术的基础。

    二进制的基数为2,每个数码只能是0和1。在二进制中,数码的进位规则是“逢二进一”,即每位二进制数的权值是2的整数次幂。

    二进制在数学和数字电路中应用非常广泛,现代的计算机和依赖计算机的设备里都使用二进制。

    二进制的计算案例:

    0011(二进制)+ 0101(二进制)= 1000(二进制)

    计算过程:

    0+0=0

    1+1=0(进位)

    1+0=1

    所以,0011+0101=1000

1.3八进制

    八进制是一种以8为基数的计数法,采用0、1、2、3、4、5、6、7八个数字,逢八进1。

    八进制在计算机领域被广泛运用,因为与二进制转换简便,同时又避免了二进制的基数大带来的许多麻烦。

    八进制数的表示方法通常以0开始,例如:0O、01、02、03、04、05、06、07等。

1.4十六进制

    十六进制是用16作为基数的计数系统 。它使用数字0-9和字母A-F(或其大写A-F)表示0到15。例如,十六进制的A表示十进制的10,B表示十进制的11,C表示十进制的12,以此类推。十六进制数通常以0x或0X开头,例如,0x1表示十六进制的1,0x1A表示十六进制的26(1×16+10×1)

二.进制转换

2.1二进制-十进制转换

    二进制向十进制转换的方法是按照二进制数的每一位乘以对应的权值(2的幂次方),然后相加得到十进制数。例如,二进制数1101转换为十进制数的计算过程为:

    1×2^3+1×2^2+0×2^1+1×2^0=8+4+0+1=13

    因此,二进制数1101转换为十进制数为13。

2.2八进制-十进制转换

    八进制转换为十进制的方法是按照八进制数的每一位乘以对应的权值(8的幂次方),然后相加得到十进制数。例如,八进制数7654转换为十进制数的计算过程为:

    7×8^3+6×8^2+5×8^1+4×8^0=4000+384+40+4=4428

    因此,八进制数7654转换为十进制数为4428。

2.3十六进制-十进制转换

    十六进制转换为十进制的方法是按照十六进制数的每一位乘以对应的权值(16的幂次方),然后相加得到十进制数。例如,十六进制数3E转换为十进制数的计算过程为:

    3×16^1+14×16^0=48+14=62

    因此,十六进制数3E转换为十进制数为62。

2.4十进制-二进制转换

    十进制转换为二进制的方法是将每一个十进制数除以2,然后将余数按从低位到高位的顺序排列,得到的数就是对应的二进制数。例如,将十进制数23转换为二进制数的过程如下:

    23 ÷ 2=11 余 1

    11 ÷ 2=5 余 1

    5 ÷ 2=2 余 1

    2 ÷ 2=1 余 0

    1 ÷ 2=0 余 1

    从下往上读取余数,得到23的二进制表示为10111。因此,十进制数23转换为二进制数为10111。

2.5十进制-八进制转换

    将一个十进制数转换为八进制同样使用除法法则,以下是一种转换方法:

    1. 选取需要转换的十进制数。

    2. 用该数除以8,得到商和余数。

    3. 将余数作为结果的最后一位。

    4. 将商作为新的十进制数,重复步骤2和3,直到商为0。

    5. 将余数按照从最后一位到第一位的顺序排列,得到转换后的八进制数。

    举例说明:

    将十进制数29转换为八进制:

    29 ÷ 8 = 3 ... 5

    3 ÷ 8 = 0 ... 3

    所以,29的八进制表示为35。

2.6十进制-十六进制转换

    下面是将十进制转换为十六进制的步骤:

    1. 将给定的十进制数除以16,得到商和余数。
    2. 如果商大于0,将商继续除以16,重复这个过程,直到商为0。
    3. 用余数来代表十六进制的数位。对于余数大于9的情况,使用A-F的字母来代表数字10-15。
    4. 将得到的余数按照从右到左的顺序排列起来,得到的就是对应的十六进制数。

    举个例子,将十进制数123转换为十六进制数:

    1. 首先,将123除以16,得到商和余数。123÷16 = 7 余 11,也就是7B。
    2. 商为7,继续除以16。7÷16 = 0 余 7,也就是07。
    3. 将得到的两个余数按照从右到左的顺序排列起来,得到最终的结果为07B。

    因此,十进制数123转换为十六进制数为07B。

2.7小数部分转换

    进制间小数部分的转换是通过不断乘以目标进制的方式进行的。

    以将十进制小数转换为二进制小数为例,首先将十进制小数乘以2,得到的整数部分即为二进制小数的第一位数。将余下的小数部分再次乘以2,得到的整数部分即为二进制小数的第二位数。依此类推,直到小数部分为0或者达到所需的精度为止。

    例如,将十进制小数0.625转换为二进制小数,过程如下:

    0.625 * 2 = 1.25,整数部分为1,余下的小数部分为0.25
    0.25 * 2 = 0.5,整数部分为0,余下的小数部分为0.5
    0.5 * 2 = 1.0,整数部分为1,小数部分为0,转换结束。

    因此,0.625的二进制表示为0.101。

    同样地,将二进制小数转换为其他进制的小数时,也是通过类似的方式进行的。不断乘以目标进制,每次得到的整数部分就是目标进制下的小数位数。

    需要注意的是,在进行进制转换时,可能存在精度丢失的问题,因为不是所有的小数都能用某个进制的有限位数精确表示。

    一个经典的进制转换中的精度丢失案例是十进制转换为二进制。在进行十进制到二进制的转换时,可能会遇到精度丢失的问题。

    举个例子,假设我们有一个十进制数值1.1,想要将其转换为二进制。首先我们将1.1乘以2,得到2.2。整数部分为2,所以我们将其记录下来。然后将小数部分0.2再乘以2,得到0.4。同样地,我们记录下整数部分0。再将小数部分0.4乘以2,得到0.8,同样记录下整数部分0。这样继续下去,直到小数部分为0或者达到我们设定的精度。

    然而,1.1在二进制中并不是一个有限的小数,它是一个循环小数,即1.1对应的二进制表示是无限循环的。在上述的转换过程中,由于计算机的存储精度限制,只能记录有限位数的二进制表示。因此,它最终会截断循环部分,导致精度丢失。

    所以,当要进行进制转换时,特别是涉及到无限循环小数的情况,可能会出现精度丢失的问题。

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

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

相关文章

SpringBoot-接口幂等性

幂等 幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 尤其是支付、订单等与金钱挂…

华硕电脑怎么录屏?分享实用录制经验!

“华硕电脑怎么录屏呀,刚买的笔记本电脑,是华硕的,自我感觉挺好用的,但是不知道怎么录屏,最近刚好要录一个教程,怎么都找不到在哪里录制,有人能教教我吗?” 随着电脑技术的不断发展…

包管理工具--》其他包管理器之cnpm、pnpm、nvm

包管理工具系列文章目录 一、包管理工具--》npm的配置及使用(一) 二、包管理工具--》npm的配置及使用(二) 三、包管理工具--》发布一个自己的npm包 四、包管理工具--》yarn的配置及使用 五、包管理工具--》其他包管理器之cnpm…

javascript检测网页缩放演示代码

一、为什么会提示浏览器显示比例不正常? 在网上冲浪,有时在打某个网站时,会提示你的浏览器显示比例不是100%,建议你将浏览器显示比例恢复为100%,以便获得最佳显示效果。 二、检测网页缩放比例的方法 那么这些网站是如…

迅为iTOP-iMX6QPLUS-Android6.0下uboot添加网卡驱动

本文档介绍在 iTOP-iMX6Q 和 iTOP-iMX6Q-PLUS 安卓 6.0 的 uboot 上添加网卡驱 动,添加完网卡驱动以后,uboot 就可以正常使用网络了。 1 具体步骤 1.1 修改 mx6sabre_common.h 文件 在 iTOP-iMX6_android6.0.1 源码目录下输入以下命令,打…

Python stomp 发送消息无法显示文本

我们向消息服务器通过 stomp 发送的是文本消息。 当消息服务器发送成功后,消息服务器上的文本没有显示,显示的是 2 进制的数据。 如上图,消息没有作为文本来显示。 问题和解决 消息服务器是如何判断发送的小时是文本还是二进制的。 根据官…

在macOS使用VMware踩过的坑

目录 MAC提示将对您的电脑造成伤害/MAC OS 升级到10.15.3后vmware虚拟机黑屏 mac系统下,vm虚拟机提示打不开/dev/vmmon mac VMware Workstation 在此主机上不支持嵌套虚拟化 mac VMware清理虚拟机空间 VMware Fusion 13在M2芯片的Mac上安装 Windows 11 首先需…

Windows 打包 Docker 提示环境错误: no DOCKER_HOST environment variable

这个问题应该还是比较常见的。 [ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.40.2:build (default) on project mq-service: Execution default of goal io.fabric8:docker-maven-plugin:0.40.2:build failed: No <dockerHost> given, no DOCKER_H…

基于elasticsearch-8.8.2 kibana-8.8.2 搭建一个文搜图系统demo

数据来源是由 图片url,图片descript,图片keywords 外加一个id 基于此首先创建 索引, keywords是一组由单词或词组 组成的一组数据,所以以数组形式压入数据: descript 是由两条语句组合成的数据(针对图片的两种不同描述) # 这里创建的keywords 数组元素类型为text,即可以模糊匹…

Docker 恶意挖矿镜像应急实例

01、概述 当网络流量监控发现某台运行多个docker容器的主机主动连接到一个疑似挖矿矿池的地址时&#xff0c;需要快速响应和排查&#xff0c;以阻止进一步的损害。 面对docker容器的场景下&#xff0c;如何快速分析和识别恶意挖矿容器?本文将分享一种应急响应思路&#xff0c;…

kafka 消费者的消费策略以及再平衡1

一kafka 再平衡 1.1 kafka的再平衡 Kafka的再平衡是consumer所消费的topic发生变化时&#xff0c;topic上的分区再次分配的情况。 默认策略是 Range CooperativeSticky 。 Kafka 可以同时使用 多个分区分配策略。 1.2 kafka触发再平衡的情况 1.consumer group中的新增或删…

Godot 和 VScode配置C#环境注意事项

前言 尽管有些博主会建议如果我们熟悉C#的话&#xff0c;最好还是使用GDscript&#xff0c;而且对于小白上手也相对简单&#xff0c;但是C#的性能终究还是比动态语言好&#xff0c;也相比CPP简单些&#xff0c;尽管现在Godot还是有些问题&#xff0c;比如不像unity那样适配swit…