计算机中,有句话叫做“程序=算法+数据结构”。如果对应到组成原理或者说硬件层面,算法就是各种“计算机指令”,书籍结构就是“二进制数据”。

众所周知,现代计算机都是用0和1组成的二进制,来表示所有的信息。

  • 程序指令用到的机器码,是使用二进制表示的
  • 存储在内存里面的字符串、整数、浮点数也都是用二进制表示的。

万事万物在计算机里都是 0 和 1,所以呢,搞清楚各种数据在二进制层面是怎么表示的,是我们必备的一课。

理解二进制的“逢二进一”

二进制和我们平时用的十进制,其实并没有什么本质区别,只是平时我们是“逢十进一”,这里变成了“逢二进一”而已。每一位,相比于十进制下的 0~9 这十个数字,我们只能用0 和 1 这两个数字。

字符串的表示,从编码到数字

不仅数值可以用二进制表示,字符乃至更多的新都能用二进制表示。最典型的例子就是字符串。最早字符串只需要使用英文字符,加上数字和一些特殊符号,然后用8位的二进制,就能表示我们日常需要的所有字符了,这个就是我们常说的ASCII码。


ASCII码就好比一个字典,用8位二进制中的128个不同的数,映射到128个不同的字符里。比如,小写字母 a 在 ASCII 里面,就是第 97 个,也就是二进制的 0110 0001,对应的十六进制表示就是 61。而大写字母 A,就是第 65 个,也就是二进制的 0100 0001,对应的十六进制表示就是 41。

在 ASCII 码里面,数字 9 不再像整数表示法里一样,用 0000 1001 来表示,而是用 00111001 来表示。字符串 15 也不是用 0000 1111 这 8 位来表示,而是变成两个字符 1 和 5连续放在一起,也就是 0011 0001 和 0011 0101,需要用两个 8 位来表示

我们可以看到,最大的32位整数,就是2147483647。如果用整数表示法,只需要32位就能表示了。但是如果用字符串来表示,一共有10个字符,每个字符用8位的话,需要整整80位。比起整数表示法,要多占用空间。

这也是为什么,很多时候我们在存储数据的时候,要采用二进制序列化这样的方式,而不是简单的把数据通过CSV或者JSON,这样的文本格式存储来进行序列化。不管是整数也好,浮点数也好,采用二进制序列化会比存储文本省下不少空间。

ASCII码只表示了128个字符,一开始足以满足需求,毕竟计算机是在美国发明的。然而随着越来越多的国家都用上了计算机,想表示比如中文这样的文本,128个字符显然是不够用的。于是,计算机工程师们开始各显神通,给自己的国家创建了对应的字符集(charset)和字符编码(character encoding)。

  • 字符集,表示的可以是一个字符的集合。比如“中文”就是一个字符集,不过这样描述一个字符集并不准确。想要更精确一点,我们可以说,“第一版《新华字典》里面出现的所有汉字”,这是一个字符集。这样,我们才能明确知道,一个字符在不在这个集合里面。比如,Unicode就是一个字符集,其中包含了150中语言的14万个不同的字符。
  • 字符编码,则是对于这些字符集里的这些字符,怎么用二进制表示出来的一个字典。比如Unicode就可以用UTF-8、UTF-16,UTFP-32等进行编码,存储成二进制。所以,有了Unicode,其实我们可以用不止 UTF-8 一种编码形式,我们也可以自己发明一套 GT-32 编码,比如就叫作 Geek Time 32 好了。只要别人知道这套编码规则,就可以正常传输、显示这段代码。

    同样的文本,采用不同的编码存储下来,如果另外一个程序,用一种不同的编码方式来进行解码和展示,就会出现乱码。在中文世界里,最典型的就是“手持两把锟斤拷,口中疾呼烫烫烫”的典故。
  • 首先,“锟斤拷”的来源是这样的。如果我们想要用 Unicode 编码记录一些文本,特别是一些遗留的老字符集内的文本,但是这些字符在 Unicode 中可能并不存在。于是,Unicode 会统一把这些字符记录为 U+FFFD 这个编码。如果用 UTF-8 的格式存储下来,
    就是\xef\xbf\xbd。如果连续两个这样的字符放在一起,\xef\xbf\xbd\xef\xbf\xbd,这个时候,如果程序把这个字符,用 GB2312 的方式进行 decode,就会变成“锟斤拷”。这就好比我们用 GB2312 这本密码本,去解密别人用 UTF-8 加密的信息,自然没办法读出有用的信息。
  • 而“烫烫烫”,则是因为如果你用了 Visual Studio 的调试器,默认使用 MBCS 字符集。“烫”在里面是由 0xCCCC 来表示的,而 0xCC 又恰好是未初始化的内存的赋值。于是,在读到没有赋值的内存地址或者变量的时候,电脑就开始大叫“烫烫烫”了

总结

我们可以用二进制编码的方式,表示任意的信息。只要建立起字符集和字符编码,并且得到大家的认同,我们就可以在计算机里面表示这样的信息了

计算机组成原理:二进制编码相关推荐

  1. 2022-1-21 计算机组成原理 —— 二进制编码

    一.二进制 1.十进制整数是如何转化成二进制数字的?(正数) 十进制的数字不断的除以 2 ,直到最后变成 0. 将后得到的余数放在高位,先得到的余数放在低位,最后便得到了二进制的数字. 由上面的图片可 ...

  2. 计算机组成计算题中的术语,计算机组成原理习题——日常记录

    计算机组成原理习题 软件分为两种,分别是 系统软件 和 应用软件 冯·诺依曼型计算机的主要特点是什么?(5点) 计算机由五大部件组成 指令和数据采用二进制表示 存储程序控制 以运算器为中心 指令由操作 ...

  3. 职业高中计算机原理,132-浅议职业高中计算机组成原理教法初探

    浅议职业高中计算机组成原理教法初探 摘要:计算机组成原理是计算机专业的一门基础核心专业基础课程,在该专业的课程体系中起着打地基的作用,学好这门课程对于提高学生的理论认知水平和实践能力有着极为重要的作用 ...

  4. 计算机组成原理码质变换,计算机组成原理负数的8421码

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:计算机组成原理负数的421码 问题详情:负数的421码怎么表示说-11最好来点儿过程说明.回答:421码是的叫法, 即BCD码.Bi ...

  5. 《计算机组成原理》----1.5 存储程序的概念

    本节书摘来自华章出版社<计算机组成原理>一书中的第1章,第1.5节, 作 者 Computer Organization and Architecture: Themes and Vari ...

  6. 《计算机组成原理》_学习笔记(二)

    计算机组成原理 第2章 计算机中的数制及编码 2.1计算机中的数制及数的转换 迄今为止,所有计算机都以二进制形式进行算术运算和逻辑操作,因此,对于用户在键盘上输入的十进制数字和符号命令,计算机必须先把 ...

  7. 第二章 数据的表示和运算 2.1.3 字符与字符串 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.3 字符与字符串 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: ASCII码/汉字编码 字符 ...

  8. 第二章 数据的表示和运算 2.1.2 BCD码 [计算机组成原理笔记]

    第二章 数据的表示和运算 2.1.2 BCD码 本笔记参考书目: 计算机组成原理(第六版.立体化教材)白中英.戴志涛 2021王道计算机组成原理视频公开课 本节重点: 8421/2421/余3码 转载 ...

  9. 计算机组成原理简单计算机设计,计算机组成原理课设.doc

    文档介绍: 课程设计任务书 学院 信息学院 专业 计算机科学与技术 学生姓名 学号 设计题目 多寄存器算术减法\右移位\输入输出\转移指令实验计算机设计(第5组) 内容及要求: 利用EL-JY-II型 ...

  10. 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc

    计算机组成原理加器实验报告 课程设计任务书 学 院信息学院专 业计算机科学与技术学生姓名学 号设计题目研制一台多累加器结构的实验计算机 内容及要求: 利用EL-JY-II型计算机组成原理实验仪提供的硬 ...

最新文章

  1. android应用兼容报告,手机资讯导报:华为发布国内首份Android7.0应用兼容报告
  2. 直播 | ACL 2021论文解读:表征与结构兼备,结构化语言模型R2D2
  3. jzoj3056-数字【数位dp,统计,容斥】
  4. Silverlight 3一瞥
  5. jira confluence 作用 ppt_有没有一个PPT技巧让自己觉得人生都亮了?
  6. NanoMsg框架C++的相关函数介绍
  7. 笔记本电脑频繁自动重启_电脑一直自动重启,教您电脑一直自动重启怎么解决...
  8. App Store Connect 如何删除应用App
  9. Windows热键注册原理
  10. Goldendict 及其词典详述
  11. BMZCTF:insomniteaser_2019_l33t_hoster
  12. RandomAccess
  13. 1年19款,款款口碑爆棚,Cocos 插件大佬的真面目竟是?
  14. bzoj 3838: [Pa2013]Raper (线段树)
  15. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 问第一个人,他说是10岁。请问第
  16. 同行评审流程与撰写审稿意见要点
  17. MySQL数据库的管理工具
  18. 防火墙添加ip白名单_如何增加网址白名单、IP白名单、策略白名单、协同防御白名单?...
  19. 计算机怎么把安全设置降低,如何设置浏览器的安全级别,怎么降低浏览器安全级别...
  20. 利用WPS文字制作电子印章

热门文章

  1. androidx.recyclerview:recyclerview的使用
  2. 斯特林数与上升幂与下降幂
  3. my sql四舍五入_SQL查询四舍五入的示例及两种方法
  4. windows文件隐藏方法
  5. java毕业设计成品基于SpringBoot美容院预约管理系统
  6. MTK6765 COL0对地拉低开机慢问题
  7. 微信解除外链屏蔽,会让诈骗信息满天飞?
  8. canvas图像处理汇总
  9. vue获取元素offsetTop,mounted获取不到offsetTop,获取元素距离页面顶边距离
  10. Nginx提高吞吐量