为什么要用到二进制?

2023-05-16

进制及其转换

  • 为什么要用到二进制?

数字电路非常广泛,小到逻辑门电路,大到超大规模集成电路,手机,电脑,智能设备……数字信号即可以表示数字,也可以表示非数值的信息,如文字,声音,图片,视频。如何将这些非数值类的信息 变成 二进制信号呢?这就涉及到编码制度,即将信息通过编码的方式转成二进制值,如 MP3、MP4、midi、jpg、gif 等等

  1. 从可行性来说,采用二进制,只有 0 和 1 两个状态,能够表示 0 和 1 两种状态的电子器件有很多,比如开关的接通和断开、晶体管的导通和截止、磁原件的正负剩磁、电位电平的高低等都可以表示 0 和 1 两个数。使用二进制,电子器件具有实现的可行性。

  2. 从运算的简易性来说,二进制的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制乘法九九口诀有 55 条公式,而二进制乘法只有四条规则)。

  3. 从逻辑上讲,由于二进制 0 和 1 正好和逻辑代码假和真相对应,有逻辑代数的理论基础,用二进制表示二值逻辑很自然。 -摘自计算机为什么是二进制?

  • 十进制是“十进”,采用的是“个/十/百/千/万…”的进位递增
  • 二进制是“二进”,采用的是“1/2/4/8/16/…”的进位递增

基数和位权

在十进制系统中(基数 10),数4327.13表示 ( 4 × 1 0 3 ) + ( 3 × 1 0 2 ) + ( 2 × 1 0 1 ) + ( 7 × 1 0 0 ) + ( 1 × 1 0 − 1 ) + ( 3 × 1 0 − 2 ) (4×10^3) + (3×10^2) + (2×10^1) + (7×10^0) + (1×10^{-1}) + (3×10^{-2}) (4×103)+(3×102)+(2×101)+(7×100)+(1×101)+(3×102) ,其中的 10 就是我们所说的基数,基数在不同数制转换中起着重要作用。我们用数字我们知道多位数有很多位,有十位、百位和千位,处在每个位上的单位1表示的数值大小不同,十位上的数字1代表 10 ,百位上的数字 1 代表 100,以此类推,故我们称 1 0 n 10^n 10n为位权 ,也称比重 (以 10 进制为例)

常见的进制

计算机中的任何数据都可以用一串 0 或 1 来表示,但考虑到二进制数位太长,所以我们也可以采用八进制和十六进制来表示数值数据。为了避免出现误会,在给出一个数的同时就必须指明这个数的数制,例如:(1010)2、(1010)8、(1010)10、(1010)16所代表的数值就不同。除了用下标来表示不同的数制以外,在计算机中还常用后缀字母来表示不同的数制。后缀 B 表示这个数是二进制数(Binary);后缀 Q 表示这个数是八进制数(Octal),本来八进制数的英文单词的第一个字母应当是 O,因为字符 O 与数字 0 太容易混淆,所以常使用字符 Q 作为八进制数的后缀;后缀 H 表示这个数是十六进制数(Hexadecimal);而后缀 D 表示这个数是十进制数(Decimal)。十进制数在书写时后缀 D 可以省略,其他进制在书写时后缀一般不可省略。例如:有 4 个数分别为 375D、101B、76Q、A17H,从后缀字母就可以知道它们分别是十进制数、二进制数、八进制数和十六进制数。

程序员们更喜欢采用程序设计语言的记号来表示不同进制的数,这就是前缀表示法,例如:在 C 语言中,八进制常数以前缀 0 开始,十六进制常数以前缀 0x 开始。

  • 十进制

    特点:有 10 个基数:0、1、2、3、4、5、6、7、8、9
    写法: ( D ) 10 — — D e c i m a l 或 ( D ) 10 = ∑ i = − m n − 1 D i ⋅ 1 0 i (D)_{10} —— Decimal \quad 或\quad (D)_{10}=\sum\limits_ {i=-m}^{n-1}D_i·10^i (D)10Decimal(D)10=i=mn1Di10i

  • 二进制

    特点:有两个基数:0、1
    写法: ( B ) 2 — — B i n a r y 或 ( B ) 2 = ∑ i = − m n − 1 B i ⋅ 2 i (B)_{2}——Binary或(B)_2=\sum\limits_{i=-m}^{n-1} B_i · 2^i (B)2Binary(B)2=i=mn1Bi2i

  • 八进制

    特点:有八个基数:0、1、2、3、4、5、6、7
    写法: ( O ) 8 — — O c t a l 或 ( O ) 8 = ∑ i = − m n − 1 = O i ⋅ 8 i (O)_{8}——Octal \quad 或 \quad (O)_{8}=\sum\limits_{i=-m}^{n-1}=O_i·8^i (O)8Octal(O)8=i=mn1=Oi8i

  • 十六进制
    特点:有十六个基数:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
    写法: ( H ) 16 — — H e x a d e c i m a l 或 ( H ) 16 = ∑ i = − m n − 1 = H i ⋅ 1 6 i (H)_{16}——Hexadecimal \quad 或 \quad (H)_{16}=\sum\limits_{i=-m}^{n-1}=H_i·16^i (H)16Hexadecimal(H)16=i=mn1=Hi16i

不同进制数对照表

其实0~9 和 a~f都只是符号而已,如果采用 n 进制,那么我们就用到 n 种符号来排列组合即可,当然,符号是可以重复的

进制转化

  • 整数转换

转换 正整数 的进制的有一个简单算法,就是通过用目标基数作长除法;余数给出从最低位开始的“数字”。

a 进制转化为 b 进制,除 r 取余数,直至商为零,余数倒序排序

例如,1020304 从 10 进制转到 7 进制:

举例

再如,10110111 从 2 进制到 5 进制:(注意:b 要先转换成 a 的进制 )

举例

  • 记忆口诀:除 b 取余,逆序排列

  • 其他进制转换与二进制的相互转换

八进制和二进制

二进制转换为八进制,采用“3 位并 1 位”,按从右向左方向,每 3 位二进制位一组,最高位不足 3 位,添 0 补足 3 位,然后将各组 3 位二进制数加权展开,得到八进制数。

  • 小数转换

转换一个“十进制” 小数,可以用重复乘法,将整数部分作为“数字”。不幸的是有限小数不一定转换成为有限小数,例如 0.1A4C 从 16 进制转换到 9 进制:

举例

  • 记忆口诀:1取整,顺序排列 (1 在这里指的是位权)

进制的简单运算

  1. 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110

  1. 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101

  1. 八进制加法:3+4=7、5+6=13、75+42=137、2427+567=3216

  1. 八进制减法:6-4=2、52-27=23、307-141=146、7430-1451=5757

  1. 十六进制加法:6+7=D、18+BA=D2、595+792=D27、2F87+F8A=3F11

  1. 十六进制减法:D-3=A、52-2F=23、E07-141=CC6、7CA0-1CB1=5FEF

乘法和除法相对来说比较复杂,涉及到逻辑门运算,属于计算机组成原理中的内容,先挖个坑,日后再填

  • 二进制是如何将加减乘除变换为加法实现的?

加法是如何由逻辑运算与、或、异或来实现的?

总结

  • 十进制(D),二进制(B),八进制(O),十六进制(H)

以上内容只是说了进制转换中如何计算的问题,是一种机械化的理解。以前见到过一篇关于进制的文章,写的很好,可我现在找不到了,遗憾。进一步用代码理解进制 理解进制转换的原理

要注意的几个地方:

  1. 在进行进制转换时,长除法中的除数的进制和被除数的进制要保持一致
  2. 从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,不足四位的用 0 补足
  3. 十进制转其他进制:整数部分用除基取余法,小数部分用乘基取整法,然后将整数与小数部分拼接成一个数作为转换的最后结果

其他数制转为 十进制 ,套公式即可(b=10)。一般来讲,b 进制系统中的数有如下形式:

( a n a n − 1 . . . a 1 a 0 . c 1 c 2 c 3 . . . ) b = ∑ k = 0 n a k b k + ∑ k = 1 ∞ c k b − k (a_{n}a_{{n-1}}...a_{1}a_{0}.c_{1}c_{2}c_{3}...)_{b}=\sum _{{k=0}}^{n}a_{k}b^{k}+\sum _{{k=1}}^{\infty }c_{k}b^{{-k}} (anan1...a1a0.c1c2c3...)b=k=0nakbk+k=1ckbk

手指二进制

  • 看完这个我笑了 hiahiahia

拓展阅读

二进制是计算机最适合的数据表示方法,把十进制数的各位数字变成一组对应的二进制代码,用 4 位二进制数来表示 1 位十进制数,称为二进制编码的十进制数(Binary Code Decimal),即 BCD 码。4 位二进制数可以组合出 16 种代码,能表示 16 种不同的状态,只需要使用其中的 10 种状态,就可以表示十进制数的 0~9 十个数码,而其他的 6 种状态为冗余状态。由于可以取任意的 10 种代码来表示 10 个数码,所以就可能产生多种 BCD 编码。BCD 编码既具有二进制数的形式,又保持了十进制数的特点,可以作为人机联系的一种中间表示,也可以用它直接进行运算。下图列出了几种常见的 BCD 码。

  • 8421 码

8421 码又称为自然(Nature)BCD 码,简称 NBCD 码,4 位二进制代码的位权从高到低分别为 8、4、2、1,这种编码的主要特点是:

  • 它是一种有权码,设其各位的值为 b3b2b1b0,则它所表示的十进制数为 D=8b3+4b2+2b+1b0
  • 简单直观。每个代码与它所代表的十进制数之间符合二进制数和十进制数相互转换的规则
  • 不允许出现 1010~1111。这 6 个代码在 8421 码中是非法码。

注意:尽管在 8421 码中 0~9 十个数码的表示形式与用二进制表示的形式一样,但这是两个完全不同的概念,不能混淆。例如,一个两位的十进制数 39,它可以表示为(00111001)421 与 100111B,这两者是完全不同的。

  • 2421 码

这种编码各位的位权从高到低分别为 2、4、2、1,其主要特点是:

  • 它也是一种有权码,所表示的十进制数为 D=2b3+4b2+2b1+1b0
  • 它又是一种对 9 的自补码,即某数的 2421 码,只要自身按位取反,就能得到该数对 9 补数的 2421 码。例如:3 的 2421 码是 0011,3 对 9 的补数是 6,而 6 的 2421 码是 1100,即将 3 的 2421 码自身按位取反可得到 6 的 2421 码。在十进制运算中,采用自补码,可以使运算器线路简化。
  • 不允许出现 0101~1010。这 6 个代码在 2421 码中是非法码。

对于有权码来说,当规定各位的权不同时,可以有多种不同的编码方案,例如还有 4221 码、4421 码、5421 码和 84-2-1 码等。

  • 余 3 码

余 3 码是一种无权码,从表 2-7 中可以看出,余 3 码是在 8421 码的基础上加 0011 形成的,因每个数都余 3,故称余 3 码,其主要特点是:

  • 它是一种无权码,在这种编码中各位的“1”不表示一个固定的十进制数值,因而不直观,且容易搞错。

  • 它也是一种对 9 的自补码。

  • 不允许出现 00000010,11011111。这 6 个代码在余 3 码中是非法码。

  • 格雷码(Gray 码)

十进制 Gray 码的方案有很多种,表 2-7 中列出的只是其中的一种。Gray 码可以避免在计数时发生中间错误,所以也被称为可靠性编码。其主要特点是:

  • 它也是一种无权码。
  • 从一种代码变到相邻的下一种代码时,只有一个二进制位的状态在发生变化。
  • 具有循环特性,即首尾两个数的 Gray 码也只有一个二进制位不同,因此 Gray 码又称为循环码。
  • 十进制 Gray 码也有 6 个代码为非法码,视具体方案而定。

参考文章

二进制/八进制/十进制/十六进制 怎么学会?

wikipedia — 手指二进制

进制(二进制、十进制、八进制、十六进制)

拓展阅读摘自教材【计算机组成原理/蒋本珊编著.一 3 版.一北京:清华大学出版社,2013.8】

版权声明


  • 本文为原创文章,版权归本人所有,转载请注明出处!
  • 原文链接:https://www.betterman.xyz/220.html
  • 所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可
  • 我的个人博客:青衫不是山 https://www.betterman.xyz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么要用到二进制? 的相关文章

  • 位图的基本原理以及应用

    位图 位图的应用场景位图的基本概念位图 位图的应用场景 假设生活中有以下这种应用场景 xff1a 有未排序的40亿个数 xff0c 需要在其中查找一个数字是否存在 如果直接使用数组来存放这些数 xff0c 那么一个整型的数占4个字节 xff
  • Retrofit 结合 Lifecycle, 将 Http 生命周期管理到极致

    code小生 一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者 xff1a xcheng 链接 xff1a https www jianshu com p 07fe489a53f2声明 xff1
  • 实践App内存优化:如何有序地做内存分析与优化

    code小生 一个专注Android领域的技术平台 作者 xff1a 舒大飞 地址 xff1a https www jianshu com p f3e8c34d0803 声明 xff1a 本文已获 舒大飞 授权 xff0c 转发等请联系原作
  • Android 面试题集(2019-04-04总结)

    作者 xff1a ClAndEllen 链接 xff1a https www jianshu com p 98255550b41e 一份Android面试题集 xff0c 适应于实习 amp 初级工程师 amp 中级工程师 xff0c 高级
  • 虚拟主机和服务器之间的区别

    很多人都容易将云服务器与虚拟主机混为一谈 xff0c 大致因为他们性能及安全性方便有不少相似的地方 xff0c 那么云服务器与虚拟主机究竟有哪些明显区别呢 xff1f 概念区分 xff1a 云服务器是一种简单高效 安全可靠 处理能力可弹性伸
  • MySQL编码详解及中文乱码问题解决方案

    最近 xff0c 在项目组使用的MySQL数据库中 xff0c 插入数据出现乱码问题 xff0c 出现诸如 或者 等字符 为了防止在 今后项目中再次出现相类似问题 在这里对于MySQL编码问题做 一个详细的介绍并对于乱码问题提出一些解决方案
  • XCOM V2.6 串口打印出来中文乱码,字体格式错乱的一种原因(设置没问题,突然乱码)

    一 问题重现 XCOM V2 6里 xff0c 完全一样的设置 xff0c 之前显示的好好的 xff0c 后来突然中文出现乱码 xff0c 字体格式也大变 xff0c 如下图 xff1a 二 解决方案 一般这种乱码 xff0c 往往都是因为
  • 生产者与消费者模型

    1 三种关系 1 生产者和生产者互斥关系 2 消费者和消费者互斥关系 3 生产者和消费者同步互斥关系 2 生产者和消费者模型 生产者消费者模型就是通过一个容器来来解决强耦合问题的 耦合 xff1a 2个或2个以上事物相互作用 xff0c 相
  • Windows server 2016基本设置

    windows server 2016相比较而言具有更加稳定的特性 xff0c 但不免有些繁琐 xff0c 可以通过一些设置可以使其更加易用 一 组策略 WIN键 43 R键 xff0c 输入gpedit msc xff0c 进入组策略设置
  • 收藏 | 阿里程序员常用的 15 款开发者工具(2020 版)

    简介 xff1a 本文精选了一些阿里经济体内部最受开发者欢迎的开发者工具 xff0c 筛选出一些带有普适性同样适合外部开发者的 xff0c 希望能助力开发者们提高开发效率 来源 阿里巴巴云原生公众号 本文精选了一些阿里经济体内部最受开发者欢
  • root登录卡在tty,登入root

    ubuntu桌面使用root直接登录的方法 Linux系统下文件的权限十分重要 xff0c 大多数操作都需要一定的权限才可以操作 xff0c Ubuntu18 04默认安装是没有设置root账户的 xff0c 因此想要获得root账户登录可
  • 使用Python做一个语音播报温湿度系统,元气满满的一天从听到他开始

    来这里发现更多有趣案例 HaaS开发框架 HaaS积木方案 xff0c 赋能生态开发者 xff0c 让您快速找到自己需要的解决方案 xff0c 硬件主板与外设 xff0c 以及各种应用组件 https haas iot aliyun com
  • 基于MVC模式实现用户注册和登录功能

    目录 1 实验简介2 具体细节分析3 实验工具4 整体框架截图5 代码实现1 login jsp2 ok jsp3 register jsp4 list jsp5 edit jsp6 DBConn java7 User java8 User
  • 十大远程控制软件(远程控制软件推荐)

    远程控制软件可以跨空间的操控对方电脑 xff0c 被广泛用于远程办公 远程教育 远程指挥 远程协助 远程维护 xff0c 已成为电脑必备应用 xff1b 那么纵观全网 xff0c 有哪些好用的远程软件 xff1f 这些远程控制软件有什么优势
  • 程序员永远的痛之字符编码的奥秘

    字符编码相信是每个程序员的噩梦 xff0c 只要是有中文的地方 xff0c 总是会遇到各种编码的问题 xff0c 并且这种问题还非常难缠 xff0c 尤其在linux上 xff0c 因为上面很多软件都是针对英语国家开发的 xff0c 是不会
  • C++11 之for 新解

    前言 C 43 43 11这次的更新带来了令很多C 43 43 程序员期待已久的for range循环 xff0c 每次看到javascript xff0c lua里的for range xff0c 心想要是C 43 43 能有多好 xff
  • c++11之初始化列表

    一 前言 C 43 43 的学习中 xff0c 我想每个人都被变量定义和申明折磨过 xff0c 比如我在大学笔试过的几家公司 xff0c 都考察了const和变量 xff0c 类型的不同排列组合 xff0c 让你区别有啥不同 反正在学习C
  • Unity Update 详解

    0x01 简介 Unity的脚本继承了Monobehaviour类 xff0c 在脚本中定义函数 xff1a void FixedUpdate span class hljs list span void span class hljs k
  • 2016总结

    欲言又止 xff1a 每年的年终总结是要在新年之前发表在博客上 xff0c 今年的年终总结拖到现在完成 xff0c 我也是服自己 这里要感谢我的高中好友 64 万学清同学 xff0c 在我去年微信发表的有关年终总结的朋友圈下 xff0c 催

随机推荐

  • 阅读代码和修改别人代码的一些技巧以及注意事项

    作为刚刚走上工作岗位的fish xff0c 都要熟悉前辈们留下来的代码 这段时间是fish最痛苦的时间同时也是最轻松的时间 痛苦是因为要看大量的代码 xff0c 同时要慢慢从学生到社会人士的转变 xff08 xff0c 再不能睡懒觉了 xf
  • ESP32控制TDC-GP22测量超声传播时间(超声流量计)

    TDC GP22控制的资料 xff0c 网上的资源都是基于STM32或者MSP430主控的 xff0c 但现在这两款芯片都太贵了 xff0c 因此就想用便宜点的ESP32 xff0c 折腾了快一周 xff0c 终于弄好了 工程源码和参考资料
  • WIN10远程连接WIN10报错:你的凭据不工作

    很多用户在升级到win10系统之后 xff0c 连接远程桌面功能的时候遇到这样一个错误 xff0c 就是远程桌面提示 你的凭据不工作 xff0c 导致无法连接远程桌面 xff0c 该怎么解决呢 xff0c 下面为大家讲解一下Win10无法连
  • 一个分号引发的血案

    最近在看 Data Structures and Algorithms 这本书 xff0c 书里对数据结构和算法进行了简单的描述 xff0c 并且用伪码进行了实现 伪码毕竟和代码还是有很大不同的 xff0c 书的说明里说有C 写的源码 xf
  • Iphone客户端程序员半年工作总结

    来公司四个半月了 xff0c 从对客户端游戏编程的小白慢慢的也能写一些东西了 xff0c 当然了这里最感谢的人就是九天了 xff0c 对于九天其它的好我就不说了 xff0c 就是感觉九天为了团队 xff0c 为了项目 xff0c 他在很用心
  • Unity Android Activity控制

    前言 开发游戏 xff0c 在国内发行 xff0c 接入各个渠道SDK是一件绕不开的事情 并且这件事非常复杂琐碎 xff0c 原因如下 xff1a a 发行平台多 xff0c Android平台有30 xff0c 40家主流发行平台 b 每
  • Unity Android 加载动态库

    前言 在接入360 Android SDK时遇到在有些机型的Android机器上报错 xff0c 具体错误提示为 xff1a Failure to initialize Your hardware does not support this
  • 德鲁克谈《自我管理》笔记摘要

    一 我的长处是什么 多数人都以为他们知道自己擅长什么 xff0c 其实不然 要发现自己的长处 xff0c 唯一的途径就是分析回馈法 写下自己预期的结果 9 12个月后 xff0c 将实际结果和预期比较 总结改善自己的预期和行动 我们要以持之
  • ubuntu下搭建cocos2dx编程环境-上

    这大半年一直在开发flash游戏 xff0c 用到的编程语言是actionscript和c 43 43 所以这次公司决定开发手游端的话 xff0c C 43 43 不是很生疏 xff0c 这是个好消息 坏消息是由于现在网页游戏还没有上线 x
  • ubuntu 系统上安装python3.6

    今天再ubuntu系统上安装python3 6 xff0c 之前版本是python 2 7版本 具体安装步骤如下 xff1a 1 sudo apt get update 2 sudo apt get install software pro
  • 用matlab实现图片的缩放

    i 61 imread 39 qiegray jpg 39 j 61 imresize i 0 5 imshow i figure imshow j
  • VR系统的组成与交互技术汇总

    今天给大家介绍一下VR系统的组成与当前一些VR交互技术 xff0c 希望大家对VR有更深的理解 一个典型的虚拟现实系统主要由计算机 输入输出设备 虚拟现实设计 浏览软件等组成 用户以计算机为核心 xff0c 通过输入输出设备与应用软件的虚拟
  • 百度云python客户端bypy的上传命令(upload)

    命令 xff1a bypy upload localfile cloudfile 说明 xff1a 1 xff09 localfile为本地文件路径 2 xff09 cloudfile为云端文件路径 3 xff09 由于百度的限制 xff0
  • 【Github】git bash无法复制粘贴

    参考教程https www cnblogs com slw0113 p 15602715 html 使用git bash时只能使用手工敲击所有命令 xff0c 非常不方便 1 在屏幕右键打开git bash命令窗口 2 在左上角右键 xff
  • python编码与反编码 decode('unicode-escape')

    反编码 我自己起的名字 xff0c 大概意思就是我得到一串字符 xff0c 是unicode码 xff0c 如 xff1a u53eb u6211 xff0c 进行反编码后得到其对应的汉字 f 61 39 u53eb u6211 39 pr
  • (11)jsp+servlet编程实战《猜数字游戏》

    使用JSP技术实现猜数字游戏 设计一个web app xff0c 每次产生一个30以内的数字 xff0c 给5次机会让客户猜测这个数字 xff1a 1 xff09 如果客户猜的数字比产生的数字值大 xff0c 则提示 可惜 xff0c 大了
  • Spark2.0 shell使用python3

    spark2 0 shell默认使用的是python2 xff0c 如果想用python3作为默认shell xff0c 那么只需要修改 spark home bin pyspark文件下的配置即可 span class token com
  • 五分钟教你搭建 Typecho个人博客

    五分钟教你搭建 Typecho 个人博客 简介 本教程将会教会你如何使用阿里云服务器添加一条A记录 xff0c 部署博客程序源码 xff0c 最后搭建一个属于自己的博客 xff0c 新手小白必备 xff01 关于 Typecho 仅仅 7
  • Typora 设置上传图片功能

    Typora 设置上传图片功能 准备工作 安装 Picgo安装 Typora配置好自己的图床 以上步骤可参考我以前的文章 如何使用 picgo 搭建个人图床 Typora 设置自动上传插入图片功能 xff0c 实现 61 61 截屏 xff
  • 为什么要用到二进制?

    进制及其转换 为什么要用到二进制 xff1f 数字电路非常广泛 xff0c 小到逻辑门电路 xff0c 大到超大规模集成电路 xff0c 手机 xff0c 电脑 xff0c 智能设备 数字信号即可以表示数字 xff0c 也可以表示非数值的信