数字逻辑——二进制

news2025/1/15 17:49:16

目录

1  信息与编码

1.1 什么是信息?

1.2 什么是编码?

2  数制和码制

2.1 数制

3  一些基本概念

3.1 位(bit)

3.2 字节(byte)

3.3 数据量的大小表示符号

4  二进制

4.1 二进制简介

4.2 二进制的转换

4.2.1 二进制转换为十进制

4.2.2 十进制转换为二进制

4.2.3 二进制转换为八进制

4.2.4 二进制转换为十六进制

4.2.5 八进制转换十六进制

4.2.6 八进制和十六进制转换为十进制

4.2.7 十进制转换为八进制和十六进制


1  信息与编码

1.1 什么是信息?

信息是为通过数据表示和传递且具有一定含义的内容。信息一般通过文字、数字、图片、视频等方式来进行表达。

1.2 什么是编码?

编码是将信息以一种格式转换为另一种格式的方式。

在编码时,需要注意以下几个要点:

  • 编码的方式
  • 效率
  • 安全性
  • 可靠性

2  数制和码制

数制:表示数量的规律。

码制:表示事物的规律。

2.1 数制

数制重要的的两:(1)每一位的构成(2)相加时从低到高向前进位的方式(减法借位同理)。

例如对于一个普通的二进制数:

对于上面这种二进制数,二进制数由0和1组成,在相加的时低位相加若等于2则本位清0后高一位的数位加1,可以简称为“逢二进一”(二进制的减法同理)。

3  一些基本概念

3.1 位(bit)

位是信息量的基本单位,在十进制中,每个位可以由0~9来表示,而在二进制中,每一个位数只能由0或1来表示。位是所有数字信息中在计算机内部表示和处理的最基本方式。

3.2 字节(byte)

在二进制中,8个bit组成一个字节,一共可以表示256中状态,字节一般使用B来表示,例如4B表示4个字节。

3.3 数据量的大小表示符号

K(千):表示2的10次方,1KB=2^{10}B

M(兆):表示2的20次方,1MB=2^{20}B

G(吉):表示2的30次方,1GB=2^{30}B

T(太):表示2的40次方,1TB=2^{40}B

4  二进制

4.1 二进制简介

二进制是一种数字的表示方法,0和1,用来表示数值。

例如对于这个二进制数:

很明显上面是一个8位二进制数,由0和1组成。可以通过写成(10010010)_2提示这是个二进制数。

4.2 二进制的转换

4.2.1 二进制转换为十进制

(1)整数

将二进制数转换为十进制数,从右往左数第n位数,该位的数乘以2的(n-1)次方,即该位为1,为1×2^(n-1),该位为0,则0×2^(n-1)。

将其转换为10进制的数的公式如下所示

因此我们可以得到上面那一串数字的十进制数值为: 1\times 2^7+0\times 2^6+0\times 2^5+1\times 2^4+0\times 2^3+0\times 2^2+1\times 2^1+0\times 2^0=146

(2)小数

小数也能将其转换为二进制数,小数点后从左向右数第n位,则乘以2的(-n)次方。如下图所示:

对于上图中的小数(0.10101)_2,对其进行计算:(0.10101)_2=0\times 2^0+1\times2^ {-1}+0\times 2^{-2}+1\times 2^{-3}+0\times 2^{-4}+1\times 2^{-5}=0.5+0.125+0.03125=0.65625

再例如二进制小数(0.0011)_2,将其转换为十进制(0.0011)_2=0\times 2^{0}+0\times 2^{-1}+0\times 2^{-2}+1\times 2^{-3}+1\times 2^{-4}=0.125+0.0625=0.1875

再例如二进制小数(0.11101)_2,将其转换为十进制(0.11101)_2=0\times 2^0+1\times 2^{-1}+1\times 2^{-2}+1\times 2^{-3}+0\times 2^{-4}+1\times 2^{-5}=0.5+0.25+0.125+0.03125=0.90625

通过对于整数和小数的学习,那么对于正的二进制数,均能用十进制来表示它,例(110.0101)_2,将其转换为十进制数为:(110.0101)_2=1\times 2^2+1\times 2^1+0\times 2^0+0\times 2^{-1}+1\times 2^{-2}+0\times 2^{-3}+1\times 2^{-4}=4+2+0.25+0.03125=6.28125

4.2.2 十进制转换为二进制

(1)整数

将十进制转换为二进制,可以由整数的转换得:

由上图可以看到,将十进制数除以2所得的余数K_0;若上面所得的商不为0,再将所得的商再除以2得到K_1,这样依次类推下去,最终得到一个K_0,K_1,K_2...K_n,一系列的数,再将其从K_nK_0依次从左往右进行排列,得到一个最终的二进制数K_nK_{n-1}...K_1K_0

例如,有一个十进制数(214)_{10}

214除以2得到商107,余数0,记为K_0

107除以2得到商53,余数1,记为K_1

53除以2得到商26,余数1,记为K_2

26除以2得到商13,余数0,记为K_3

13除以2得到商6,余数1,,记为K_4

6除以2得到商3,余数0,记为K_5

3除以2得到商1,余数1,记为K_6

1除以2得到商0,余数1,记为K_7

用图片来表示为:

再将上面的内容按照K_7K_6K_5K_4K_3K_2K_1K_0,进行排列得到二进制数11010110,再将其进行验算:(11010110)_2=1\times 2^7+1\times 2^6+1\times 2^4+1\times 2^2+1\times 2^1=128+64+16+4+2=214

(2)小数

与整数一样,小数也可以由十进制转换为二进制。将十进制小数乘以2所得的数进行取整,得到K_1;如果上面结果不为1,取小数部分乘以2所得的数进行取整,记为K_2;...若第n位数乘以2所得结果为1,那么第n位记为K_n,且K_n=1。这是将K_1,K_2,...,K_n从左到右依次排列,最终该数的小数部分为:0.K_1K_2K_3...K_{n-1}K_n

例如十进制数0.65625,将其转换为二进制数的过程为:

0.65625乘以2得到1.3125,取整得到1,记作K_1,取小数部分0.3125不为0;

0.3125乘以2得到0.625,取整得到0,记作K_2,取小数部分0.625不为0;

0.625乘以2得到1.25,取整得到1,记作K_3,取小数部分0.25不为0;

0.25乘以2得到0.5,取整得到0,记作K_4,取小数部分0.5不为0;

0.5乘以2得到1,取整得到1,记作K_5,小数部分为0,结束。

因此0.65625转换为二进制数为0.10101,进行验算得:(0.10101)_2=1\times 2^{-1}+1\times 2^{-3}+1\times 2^{-5}=0.5+0.125+0.03125=(0.65625)_{10}

上面过程的示意图如下所示:

将二进制小数转换为整数时会出现两种情况,首先第一种是能够处理完全的,例如十进制数0.25,0.625。将转换为二进制数为:(0.25)_{10}=(0.01)_2,(0.625)_{10}=(0.101)_2。但是同时也会出现另一种情况,即不能完全表示这个十进制整数。例如十进制的数0.3,将0.3转换为二进制数的过程如下所示:

0.3乘以2得到0.6,取整得到0,记作K_1,取小数部分0.6不为0;

0.6乘以2得到1.2,取整得到1,记作K_2,取小数部分0.2不为0;

0.2乘以2得到0.4,取整得到0,记作K_3,取小数部分0..4不为0;

0.4乘以2得到0.8,取整得到0,记作K_4,取小数部分0.8不为0;

0.8乘以2得到1.6,取整得到1,记作K_5,取小数部分0.6不为0;

......

通过上面计算过程可以看到,对于十进制数0.3,可以看到不能完全将其表示,即十进制转换为二进制时会转换为一个无线循环二进制小数(有的数转换为二进制时无限不循环小数,例如Π),这种小数不能把它完全表示出来,因此可以精确到某一位。例如将(0.3)_{10}将其转换为二进制小数,精确到小数点后五位,是(0.01001)_2

4.2.3 二进制转换为八进制

同样,二进制也可以转换为八进制和十六进制的数。对于二进制转化为八进制的数可以看到二进制中每三位的转换为一位的八进制数,例如:(100)_2=(4)_8(010)_2=(2)_8

同理,二进制转可以为十六进制,每4位转换为一个十六进制数,(0011)_2=(3)_{16}(1010)_2=(A)_{16},(1110)_2=(E)_{16},需要注意的是在一些编程语言(Java、C++、C、Shell等等)可以在十六进制数前面加上0X表示十六进制,例如0X4D,0X3F。

对于四位二进制数,其二进制、八进制和十六进制相互转换表如下所示:

二进制八进制十六进制二进制八进制十六进制
00000001000108
00010111001119
0010022101012A
0011033101113B
0100044110014C
0101055110115D
0110066111016E
0111077111117F

根据上面的表格,我们可以对较长的二进制的数对其进行进行转换。

例如对于二进制数转换为八进制,例如二进制数:(1001011)_2,将其从右向左每三位转换为八进制的数,转换过程如下所示:

由上图可知,最低三位的二进制数111转换为八进制的7,中间三位的101转换为八进制的5,最高三位100转换为八进制的4.。

如果二进制位数不是3的倍数,例如(10010110)_2,将其转换为八进制数为:

对于最高两位,可以将其在前面补0的操作,例如二进制数10可以在前面补以为变为010,即(10)_2=(010)_2=(2)_8,因此结果为(10010110)_2=(223)_8

八进制转换为二进制只需上述相反过程即可。

4.2.4 二进制转换为十六进制

与上面二进制转换为十六进制的规律同理,二进制数同样可以转换为十六进制的数。每四位二进制数转换为一位十六进制的数。例如:(1110 \: \: 1010\:\: 0110\: \: 0010)_2

可以看到将上述二进制数转换为十六进制之后,结果如下所示:(1110 \: \: 1010\:\: 0110\: \: 0010)_2=(EA62)_{16} 

同理如下遇到该二进制数所有的数位之和不是4的倍数时,可以在高位补0使该数的位数为4的倍数,例如:(10 \: \: 1010\:\: 0110\: \: 0010)_2,可以数出这个二进制数一共有14位,将其补充到位数为4的倍数时,即16位的数(0010 \: \: 1010\:\: 0110\: \: 0010)_2转换为16进制的数为:(10 \: \: 1010\:\: 0110\: \: 0010)_2=(0010 \: \: 1010\:\: 0110\: \: 0010)_2=(2A62)_{16}

十六进制转换为二进制只需上述相反过程即可。

4.2.5 八进制转换十六进制

对于八进制数来说,一般先将其转换为相对应的二进制数,再将其转换为对应的十六进制数。即:八进制->二进制->十六进制。八进制转换为二进制即一位的八进制转换为三位的二进制数,再将每四位二进制转换为一位十六进制数。例如(6271)_8转换为    (6271)_8=(1100\: \: 1011 \: \: 1001)_2,再将该二进制数转换为十六进制为(1100\: \: 1011 \: \: 1001)_2=(CB9)_{16}。因此可以得到(6271)_8=(CB9)_{16}

十六进制转换为八进制只需上述过程相反过程即可。

4.2.6 八进制和十六进制转换为十进制

八进制和十六进制转换为十进制的原理与二进制转换为十进制类似,例如有这样的八进制数(413)_8,将其转换为十进制数为:(413)_8=4\times 8^2+1\times 8^1+3\times 8^0=265

同样对于一个十六进制的数,例如(B6)_{16},将其转换为(B6)_{16}=11\times 16^1+6\times 16^0=182

4.2.7 十进制转换为八进制和十六进制

将十进制转换为八进制和十六进制时,可以先将其转换为二进制,再将二进制数转换为八进制或者十六进制数。

或者将十进制转换为二进制中的“除2取余,逆序排列"(小数部分是"乘2取整,正序排列”)变为“除8取余,逆序排列”和“除16取整,逆序排列”。

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

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

相关文章

初识TCP(编写回显服务器)

目录 初识TCP(编写回显服务器)TCP相关的API服务器代码实现客户端代码实现部分代码解释注意事项效果展示 初识TCP(编写回显服务器) TCP相关的API ServerSocket : 这是socket类,对应到网卡,但是…

ElasticSearch7.x入门教程之全文搜索聚合分析(十)

文章目录 前言一、指标聚合1、统计最大值:Max Aggregation2、统计最小值:Min Aggregation3、统计平均值:Avg Aggregation4、求和:Sum Aggregation5、Cardinality Aggregation6、基本统计:Stats Aggregation7、高级统计…

【Linux】DNS服务配置

DNS DNS是什么 DNS是Domain Name System的缩写,即域名系统。它是一种用来将域名转化为IP地址的系统。在互联网中,每个网站都有一个唯一的IP地址,但是人们更习惯使用简单易记的域名来访问网站。DNS的作用就是将这些域名转化为对应的IP地址,使得人们可以通过域名来访问网站…

第31天:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

时间轴: 演示案例: 打包器-WebPack-使用&安全 第三方库-JQuery-使用&安全 打包器-WebPack-使用&安全 参考:https://mp.weixin.qq.com/s/J3bpy-SsCnQ1lBov1L98WA Webpack 是一个模块打包器。在 Webpack 中会将前端的所有资源…

开发者如何使用GCC提升开发效率Opencv操作

看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…

使用PaddlePaddle实现线性回归模型

目录 ​编辑 引言 PaddlePaddle简介 线性回归模型的构建 1. 准备数据 2. 定义模型 3. 准备数据加载器 4. 定义损失函数和优化器 5. 训练模型 6. 评估模型 7. 预测 结论 引言 线性回归是统计学和机器学习中一个经典的算法,用于预测一个因变量&#xff0…

图像处理网络中的模型水印

论文信息:Jie Zhang、Han Fang、Weiming Zhang、Wenbo Zhou、Hao Cui、Hao Cui、Nenghai Yu:Model Watermarking for Image Processing Networks 本文首次提出了图像处理网络中深度水印问题,将知识产权问题引入图像处理模型 提出了第一个深…

全面UI组件库Telerik 2024 Q4全新发布——官方宣布支持.NET 9

Telerik DevCraft包含一个完整的产品栈来构建您下一个Web、移动和桌面应用程序。它使用HTML和每个.NET平台的UI库,加快开发速度。Telerik DevCraft提供最完整的工具箱,用于构建现代和面向未来的业务应用程序,目前提供UI for ASP.NET MVC、Ken…

计算机毕业设计hadoop+spark民宿推荐系统 民宿数据分析可视化大屏 民宿爬虫 民宿大数据 知识图谱 机器学习 大数据毕业设计

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

工业—使用Flink处理Kafka中的数据_ChangeRecord1

使用 Flink 消费 Kafka 中 ChangeRecord 主题的数据,当某设备 30 秒状态连续为 “ 预警 ” ,输出预警 信息。当前预警信息输出后,最近30

【Android】从事件分发开始:原理解析如何解决滑动冲突

【Android】从事件分发开始:原理解析如何解决滑动冲突 文章目录 【Android】从事件分发开始:原理解析如何解决滑动冲突Activity层级结构浅析Activity的setContentView源码浅析AppCompatActivity的setContentView源码 触控三分显纷争,滑动冲突…

消息中间件-Kafka2-3.9.0源码构建

消息中间件-Kafka2-3.9.0源码构建 1、软件环境 JDK Version 1.8Scala Version 2.12.0Kafka-3.9.0 源码包 下载地址:https://downloads.apache.org/kafka/3.9.0/kafka-3.9.0-src.tgzGradle Version > 8.8Apache Zookeeper 3.7.0 2、源码编译 打开源码根目录修改…

【ElasticSearch】倒排索引与ik分词器

ElasticSearch,简称ES(后文将直接使用这一简称),是一款卓越的开源分布式搜索引擎。其独特之处在于其近乎实时的数据检索能力,为用户提供了迅速、高效的信息查询体验。 它能够解决全文检索,模糊查询、数据分析等问题。那么它的搜索…

【开源免费】基于Vue和SpringBoot的洗衣店订单管理系统(附论文)

博主说明:本文项目编号 T 068 ,文末自助获取源码 \color{red}{T068,文末自助获取源码} T068,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

CAN接口设计

CAN总线的拓扑结构 CAN总线的拓扑结构有点像485总线,都是差分的传输方式,总线上都可以支持多个设备,端接匹配电阻都是120Ω。 485和CAN通信方面最大的区别:网络特性。485是一主多从的通讯方式,CAN是多主通讯,多个设备都可以做主机。那多个设备都相要控制总线呢?…

Keil5配色方案修改为类似VSCode配色

1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…

C++设计模式之外观模式

动机 下图中左边方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。 如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统…

矩阵转置        ‌‍‎‏

矩阵转置 C语言代码C 语言代码Java语言代码Python语言代码 💐The Begin💐点点关注,收藏不迷路💐 输入一个n行m列的矩阵A,输出它的转置 A T A^T AT。 输入 第一行包含两个整数n和m,表示矩阵A的行数和列数。…

Linux输入设备应用编程

本章学习输入设备的应用编程,首先要知道什么是输入设备?输入设备其实就是能够产生输入事件的设备就称为输入设备,常见的输入设备包括鼠标、键盘、触摸屏、按钮等等,它们都能够产生输入事件,产生输入数据给计算机系统。…

STM32MX 配置CANFD收发通讯

一、环境 MCU:STM32G0B1CEU6 CAN收发器:JIA1042 二、MX配置 配置SYS 配置canfd并开启中断,我开了两个FDCAN,配置是一样的,这里贴一下波特率的计算公式: 也就是:CAN时钟频率/预分频器/&…