【新书推荐】2.3节 二进制的简写和转换

本节内容:二进制

         ■电子计算机为何采用二进制:电子计算机电路只有低电平和高电平两种状态,分别表示二进制数0和1。

         ■二进制的简写形式:计算机内的数据都使用二进制数。但是二进制书写不便,通常我们采用十六进制作为二进制的简写形式来表示二进制数。

         ■进制间的转换:4位二进制数表示为1位十六进制数0~F。4位二进制数表示1位十进制数0~9。二进制数或十六进制数转换为十进制数采用位权法。十进制数转换为二进制数或十六进制数采用除法。

2.3.1 电子计算机为何采用二进制

我们可能会有这样的想法,如果电子计算机刚发明的时候采用十进制就好了,用不着来回转换,而且我们也非常熟悉十进制。

也有人会说二进制如何好,简单高效。其实这种说法是错误的。十进制的算术逻辑运算要比二进制的效率高的多。毕竟计算的步骤少了很多。

    其实真正采用二进制的原因是由于电子计算机受制于计算机物理硬件的制约。电子计算机电路只有0和1两种稳定的状态,二进制才是电子计算机最合理的选择。况且二进制算术逻辑运算和十进制算术逻辑运算是一样的,并不影响计算结果的正确性,只是二进制算术逻辑运算的效率比十进制低。由于电子计算机的运算速度足够快,可以弥补效率低的缺陷。因此,计算机中存储的任何数据和指令都是由二进制数0和1组成的。

其实电子计算机的理论基础早在一百多年以前就已经完成了,只是受制于当时的材料和工艺的制约。当电子管、集成电路发明出来之后,有了合适的材料,电子计算机自然也就发明出来了。

量子计算机肯定不再采用二进制,因为量子特性可以同时具备很多种状态,量子计算机的效率肯定比只有0和1的二进制高的多。只是目前量子计算机仍然受制于制造工艺、材料和成本的制约,这些问题一旦得到解决,量子计算机的普及和应用肯定可以飞速实现。

2.3.2 二进制的简写形式

使用4位二进制数书写十进制数0~15:

0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

二进制数书写比较麻烦,可以采用二进制的简写形式,即十六进制表示。

使用十六进制数书写十进制数0~15:

0 1 2 3 4 5 6 7 8 9 A B C D E F。

显然十六进制数书写更为简单高效。在以后学习过程中,我们经常使用的工具软件如调试器、编译器、内存分析工具、二进制文本工具等都是使用十六进制来表示二进制数。

2.3.3 进制间的转换

二进制与十六进制之间的转换

2-1 二进制与十六进制之间的转换

                                表2-1 二进制与十六进制之间的转换

二进制与十进制之间的转换   

                                表2-2 二进制与十进制之间的转换

如表2-1、表2-2所示:每一位十进制数或者十六进制数,分别对应4位二进制数。

十进制数0~9对应的4位二进制数,称为8421 BCD码,我们将在第四章常用编码规则中详细讲解BCD码。

二进制数转十进制数

                                                            

                                             表2-3 二进制数

将上述二进制数转换为对应的十进制数。

算法:位权表示法把n位二进制整数转换为十进制数(不考虑正负数)。

dec=(DN-1×2N-1)+(DN-2×2N-2)+...+(D1×21)+(D0×20)    注:公式中的N代表二进制数位数,

10110101B=1*27+0*26+1*25+1*24+0*23+1*22+0*21+1*20=128+32+16+4+1=181D(D表示十进制),可以使用查表的方法获取2的幂。  

2n

十进制值

2n

十进制值

20

1

28

256

21

2

29

512

22

4

210

1024

23

8

211

2048

24

16

212

4096

25

32

213

8192

26

64

214

16384

27

128

215

32768

                                                表2-4   2进制位的位权值

十进制数转二进制数

算法:十进制数重复除以2,每次的余数记录下来作为当前二进制数位的值,直到

商为0为止。举例:十进制数57转为二进制数 。

 

除法

余数

57/2

28

1

28/2

14

0

14/2

7

0

7/2

3

1

3/2

1

1

1/2

0

1

                                                        表2-5 十进制数转二进制数除法表

    把余数列数字反向排列就得到了二进制数111001,由于intel存储的二进制数位数总是8或者8的倍数,因此前面空位补0,57的二进制数为0011 1001B

十六进制数转十进制数

   

16进制数高位

1

6

A

7

9

4

16进制数低位

0001

0110

1010

0111

1001

0100

                                                      表2-6 十六进制数转二进制数

算法:位权表示法把n位无符号数十六进制整数转换为十进制数(不考虑正负数),

dec=(DN-1×16N-1)+(DN-2×16N-2)+...+(D1×161)+(D0×160)公式中的N代表十六进制数数位,

16A794H=1*165+6*164+10*163+7*162+9*161+4*160=1484692

                           

16n

十进制值

16n

十进制值

160

1

164

65536

161

16

165

1048576

162

256

166

16777216

163

4096

167

268435456

2-7 十六进制位的位权值

         ■十进制数转十六进制数

算法:

十进制数重复除以16,每次的余数记录下来作为当前十六进制数位的值,直到

商为0为止。举例:十进制数422转为十六进制数。              

    

除法

余数

422/16

26

6

26/16

1

A

1/16

0

1

                                             表2-8 十进制数转十六进制数除法

把余数列数字反向排列就得到了十六进制数1A6H,由于intel存储的二进制数位数总是8或者8的倍数,因此前面空位补0,422的十六进制数为01A6H。

练习

1、将下面的二进制数用16进制表示(不允许使用计算器也不允许计算)

      1100 1011 0101 0100 1110 1011 0101 0111 1011 0100 1010 1011。

2、将下面的十六进制数用二进制表示(不允许使用计算器也不允许计算)

       487FDC120ACE69B953FE。

3、将下面的二进制数转换为十进制正整数(先使用算法,然后用计算器检验)。

      00100111B   101101101111B  01100001B

4、将下面的十进制正整数转换为二进制数(先使用算法,然后用计算器检验)。

      121D   2345D    13124D    121798D

5、将下面的16进制正整数数转换为十进制数(先使用算法,然后用计算器检验)。

      87DAFH   875B3FH   7A8CBFFH   1234H

6、将下面的十进制正整数数转换为十六进制数(先使用算法,然后用计算器检验)。

      412434D   3643D  643262D   345D

本文摘自编程达人系列教材《X86汇编语言基础教程》。

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

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

相关文章

网络协议与攻击模拟_06攻击模拟SYN Flood

一、SYN Flood原理 在TCP三次握手过程中, 客户端发送一个SYN包给服务器服务端接收到SYN包后,会回复SYNACK包给客户端,然后等待客户端回复ACK包。但此时客户端并不会回复ACK包,所以服务端就只能一直等待直到超时。服务端超时后会…

React16源码: React中的completeUnitOfWork的源码实现

completeUnitOfWork 1 )概述 各种不同类型组件的一个更新过程对应的是在执行 performUnitOfWork 里面的 beginWork 阶段它是去向下遍历一棵 fiber 树的一侧的子节点,然后遍历到叶子节点为止,以及 return 自己 child 的这种方式在 performUni…

PN532测试工具

PN532测试工具,可以读写卡,修改数据,格式化清卡 读写UID卡,CUID卡,锁UFUID卡 如下图,软件简单易用 可以对UID卡、CUID卡,FUID卡、UFUID卡读卡号,修改卡号 操作简单易用 软件下载地址…

Django开发_17_表单类

一、介绍 为了简化前端form表单代码 二、步骤 (一)创建form.py 创建一个表单类 from django import formsclass RegisterForm(forms.Form):reg_name forms.CharField(max_length10, label用户名)reg_pwd forms.CharField(max_length20, label密码…

System.Data.SqlClient.SqlException:“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误

目录 背景: 过程: SQL Express的认识: 背景: 正在运行程序的时候,我遇到一个错误提示,错误信息如下,当我将错误信息仔细阅读了一番,信息提示的很明显,错误出现的来源就是连接数据库代码这块string connStr "s…

供应链安全项目in-toto开源框架详解

引言:in-toto 是一个开源框架,能够以密码学的方式验证构件生产路径上的每个组件和步骤。它可与主流的构建工具、部署工具进行集成。in-toto已经被CNCF技术监督委员会 (Technical Oversight Committee,TOC)接纳为CNCF孵化项目。 1. 背景 由于…

Elasticsearch:使用 Gemini、Langchain 和 Elasticsearch 进行问答

本教程演示如何使用 Gemini API创建 embeddings 并将其存储在 Elasticsearch 中。 我们将学习如何将 Gemini 连接到 Elasticsearch 中存储的私有数据,并使用 Langchian 构建问答功能。 准备 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Ki…

章鱼网络 Community Call #17|打造全新 Omnity 跨链协议

香港时间2024年1月8日12点,章鱼网络举行第17期 Community Call。 对于 Octopus Community 而言,2023年是一个分水岭。我们如期兑现我们的承诺,成功上线了包括 $NEAR Restaking 和 Adaptive IBC 在内的完整的 Octopus 2.0。 自从我们在2023年…

x-cmd pkg | perl - 具有强大的文本处理能力的通用脚本语言

目录 介绍首次用户技术特点竞品进一步阅读 介绍 Perl 是一种动态弱类型编程语言。Perl 内部集成了正则表达式的功能,以及巨大的第三方代码库 CPAN;在处理文本领域,是最有竞争力的一门编程语言之一 生态系统:综合 Perl 档案网络 (CPAN) 提供了超过 25,0…

Tree-Shaking 作用和实现原理

一、什么是Tree-shaking Tree-shaking 它的名字来源于通过摇晃(shake)JavaScript代码的抽象语法树(AST),是一种用于优化JavaScript代码的技术,主要用于移除未被使用的代码,使得最终生成的代码包…

IPoE技术汇总

在国内并没有遇到这么多的IPoE(IP over Ethernet)技术,可能也是因为我来日本多年了,没有接触国内的IPv4 over IPv6的技术,感觉国内IPv4地址紧张,用的传统NAT和PPPoE非常多,大多数设备还是建立在…

记一次Flink通过Kafka写入MySQL的过程

一、前言 总体思路:source -->transform -->sink ,即从source获取相应的数据来源,然后进行数据转换,将数据从比较乱的格式,转换成我们需要的格式,转换处理后,然后进行sink功能,也就是将数…

Linux|centos7操作系统|rtl8188gu芯片的网卡驱动使用DKMS安装管理

前言: DKMS是一个外置模块管理工具,可以自动build,安装各类驱动 DKMS (Dynamic Kernel Module Support) 是一种框架,用于在 Linux 操作系统中构建和维护内核模块。内核模块是 Linux 内核的一部分,它们提供了许多功能&…

(C++)简单计算器

文章目录 一、实验目的、内容二、实验程序设计及结构1.需求分析变量函数 2.设计结构或流程图 三、设计过程四、测试分析第一组第二组实验中出现的bug及解决方案 五、设计的特点和结果 一、实验目的、内容 输入是一个带有括号的四则运算表达式,输出是计算得出的正确…

详细分析Java中的list.foreach()和list.stream().foreach()

目录 前言1. 基本知识2. 差异之处2.1 执行顺序2.2 串行并行2.3 复杂数据处理2.4 CRUD集合2.5 迭代器 3. 总结4. 彩蛋 前言 典故来源于项目中使用了两种方式的foreach,后面尝试体验下有何区别! 先看代码示例: 使用List的forEach&#xff1a…

手写Vue3源码

Vue3核心源码 B站视频地址:https://www.bilibili.com/video/BV1nW4y147Pd?p2&vd_source36bacfbaa95ea7a433650dab3f7fa0ae Monorepo介绍 Monorepo 是管理项目代码的一种方式,只在一个仓库中管理多个模块/包 一个仓库可以维护多个模块,…

打 jar 包运行 在windows 平台控制台和日志 乱码解决

--拒絕鷄巴囉嗦,直接解決問題 我们在Windows下运行jar包时,常常会出现乱码,主要分为dos窗口输出的日志中出现乱码和程序返回数据出现乱码。 dos窗口输出的日志中出现乱码 执行如下命令,将控制台输出编码改为UTF8: ch…

基于springboot+vue的足球青训俱乐部管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

Tkinter + removebg实现Ai抠图

我们先对removebg进行一个说明: "removebg" 是一个在线服务,它允许用户自动去除图片的背景。用户只需上传图片,系统会通过算法自动识别并去除背景,生成透明背景(PNG格式)或者用户指定的新背景图…

Qt6入门教程 10:菜单栏、工具栏和状态栏

目录 一.菜单栏 1.Qt Designer 1.1添加菜单和菜单项 1.2添加二级菜单 1.3给菜单和菜单项添加图标 1.4给菜单项添加功能 2.纯手写 二.工具栏 1.Qt Designer 1.1添加工具栏按钮 1.2工具栏的几个重要属性 2.纯手写 三.状态栏 1.Qt Designer 2.纯手写 用Qt Creator新…