数字逻辑——二进制

目录

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.xdnf.cn/news/33914.html

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

相关文章

PyQt信号槽实现页面的登录与跳转 #页面进一步优化

将登录框中的取消按钮使用信号和槽的机制,关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为"123456",如果账号密码匹配成功,当前界面关…

博客园-添加统计图

💖简介 通过WPS在线列表构建博客园每日相关数据统计图。 👉效果 📖实现 前往WPS https://www.kdocs.cn/latest 新建多维表格 创建表格视图 新建仪表盘 新建卡片、折线图 卡片配置示例 折线图配置示例 点击分享获取链接 ⭐链接配置 在co…

浏览器指纹是什么?14种指纹的技术原理

视频版链接: 浏览器指纹是什么?14种指纹背后的技术原理 浏览器指纹简介 这个网站在我没登录的情况下,就能生成一个用户ID。即使我打开了浏览器的无痕模式,生成出来的ID也是一模一样。这背后的技术就是浏览器指纹。即使用户没有登…

Junit5 单元测试入门

基础知识 常用注解含义 Test:标记一个方法为测试方法BeforeEach:标记的方法会在每个测试方法执行前执行AfterEach:标记的方法会在每个测试方法执行后执行BeforeAll:标记的方法会在所有测试方法执行前执行一次AfterAll&#xff1…

JAVA-平台模块系统原理

菜鸟为了巩固所写 目录 菜鸟为了巩固所写 代码之间的依赖性 绘制类型依赖图 扩展到包之间的依赖关系 进一步延伸到jar包之间的依赖性 组件依赖图 JAVA技术领域中的两个著名的“擦除” Java类型的“大泥球” JAVA模块解析 模块解析的过程 模块路径明确模块的搜索与…

DevExtreme JS ASP.NET Core v24.2新功能预览 - 全新的聊天组件

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…

总结与反思-50天小总结

作者:麻瓜也要学魔法 时间:2024/12/4 不知不觉中咱博客的码龄居然50天了!内容主要就是运维方面的知识,主打一个学到哪发到哪。 看了看,50天欸!刚好就50篇文章,不得不说(咱还是真稳定…

centos8 mysql 主从复制

原理 一、一主一从 准备工作 1.主库配置 1、修改配置文件 /etc/my.cnf #mysql 服务ID,保证整个集群环境中唯一,取值范围:1-232-1,默认为 server-id1 #是否只读,1 代表只读,0代表读写 read-only0 #忽略的数据,指不需要同步的数据库 #binlog…

iptables防火墙SNAT与DNAT

第二章 iptables防火墙SNAT与DNAT 文章目录 第二章 iptables防火墙SNAT与DNAT1 SNAT1.1 SNAT原理与应用1.2 SNAT工作原理1.3 SNAT转换前提条件2 SNAT示例2.1 网关[服务器配置](https://so.csdn.net/so/search?q服务器配置&spm1001.2101.3001.7020)2.1.1 网关服务器配置网卡…

【推荐100个unity插件之36】Unity6使用DOTS基础篇——Entities(非常适合做一些弹幕射击游戏)

文章目录 前言DOTS 核心组成DOTS 解决传统问题的痛点1、优化内存布局:2、减少垃圾回收和内存管理开销:3、提高并行计算能力:4、高效的系统和组件设计:5、易于扩展和优化: 安装文档在编辑器下构建 ECS World查看Entity的…

AI一键生成原创圣诞印花图案

一、引言 随着科技的飞速发展,AI 已经深入到我们生活和工作的各个角落,为创意设计领域带来了前所未有的变革。在圣诞即将来临之际,想要设计独特的圣诞印花图案却又担心缺乏灵感或专业技能?别担心,千鹿 AI 为我们提供了…

第一部分 —— 密文类型

文章目录 1. Abstract1.1 Some Conceptions 2. TFHE Ciphertexts3. GLWE3.1 Trivial GLWE ciphertexts3.2 LWE 和 RLWE3.3 Public key encryption 4. GLev4.1 Lev and RLev 5. GGSW5.1 GSW and RGSW 1. Abstract TFHE 指的是 全同态加密策略。意思是,允许对密文进行…

进制转换详解

进制转换的基本概念 进制转换是将一个数从一种基数(进制)转换为另一种基数的过程。例如,将十进制数转换为二进制、八进制或十六进制。 转换过程 以十进制数转换为其他进制为例,转换的基本步骤如下: • 除以目标进制…

构建数字影像生态群,致力推动数字经济发展

在当今数字化浪潮汹涌澎湃的时代,数字经济逐渐成为全球经济增长新的核心驱动力。国际数字影像产业园作为数字影像领域的创新高地,正以其独特的优势和不懈的努力,为推动数字经济的蓬勃发展贡献着卓越力量。 国际数字影像产业园凭借其优越的地理…

性能测试工具1:perf

1.介绍 perf是linxu下的一款性能分析工具。Linux的性能计数器是一个新的基于内核的子系统,它为所有性能分析提供了一个框架。它包括硬件级别(CPU/PMU、性能监控单元)功能和软件(软件计数器、跟踪点)功能。 通过perf,应用程序可以利用PMU…

学籍照片电子版手机拍照采集且批量自动命名的方法

学籍照片作为学生档案的重要组成部分,其电子版的采集和管理显得尤为重要,目前主要通过“全国学籍信息管理系统”进行管理。传统的拍照和命名方式不仅耗时耗力,而且容易出现错误。为了提高效率和准确性,下面介绍如何由教师自己使用…

在wsl2中安装archlinux

在之前的博客中,我介绍了如何在虚拟机或者真实机上安装archlinux并且进行一定的配置,但是实际上Linux不管怎么配置在日常使用中都没有Windows简单便利,在开发有关Linux的程序时过去用虚拟机或者直接在Windows上使用ssh在远程服务器上进行开发…

蓝桥杯真题1259奇怪的捐赠(python版)

解题思路:将100万转换为7进制数,数位之和就是分成的份数 num 100_0000 sum 0 while num > 0:remainder num % 7num num // 7sum remainder print(sum)代码来自题目题解 num对7进行取余,取值范围理应是[0,1,2,3,4,5,6] 但是对于题目给定的捐赠金额实际上并不…

学习日志020---qt信号与槽

作业 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QPushButton,QLineEditfrom Form import Ui_Form from second import Ui_second from PySide6.QtCore import Qtclass MyWidget(QWidget,Ui_Form):def __init__(self):super().__init__()self.setupUi(se…

python学习笔记15 python中的类

上一篇我们介绍了python中的库 ,学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库,常见的内置库(random、hashlib、json、时间、os) 这一篇我们来看一下python中的类 创建一个类 class 类的名称():de…