深入浅出计算机组成原理
徐文浩
bothub 创始人
70432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?

UTF-8、UTF-16、UTF-32
Unicode
补码表示法
原码表示法
计算机组成的硬件层面
任意信息的二进制表示
“锟斤拷”和“烫烫烫”的原因
二进制序列化
字符集和字符编码
ASCII码
正数和负数的二进制表示
十进制转二进制
Unicode和UTF-8关系
程序指令和内存数据都用二进制表示
0和1表示所有信息
课后思考
推荐阅读
总结延伸
乱码问题
字符串的二进制表示
二进制转换
文本字符串的二进制表示
整数的二进制表示
二进制数据
算法 + 数据结构
二进制编码

该思维导图由 AI 生成,仅供参考

上算法和数据结构课的时候,老师们都会和你说,程序 = 算法 + 数据结构。如果对应到组成原理或者说硬件层面,算法就是我们前面讲的各种计算机指令,数据结构就对应我们接下来要讲的二进制数据。
众所周知,现代计算机都是用 0 和 1 组成的二进制,来表示所有的信息。前面几讲的程序指令用到的机器码,也是使用二进制表示的;我们存储在内存里面的字符串、整数、浮点数也都是用二进制表示的。万事万物在计算机里都是 0 和 1,所以呢,搞清楚各种数据在二进制层面是怎么表示的,是我们必备的一课。
大部分教科书都会详细地从整数的二进制表示讲起,相信你在各种地方都能看到对应的材料,所以我就不再啰啰嗦嗦地讲这个了,只会快速地浏览一遍整数的二进制表示。
然后呢,我们重点来看一看,大家在实际应用中最常遇到的问题,也就是文本字符串是怎么表示成二进制的,特别是我们会遇到的乱码究竟是怎么回事儿。我们平时在开发的时候,所说的 Unicode 和 UTF-8 之间有什么关系。理解了这些,相信以后遇到任何乱码问题,你都能手到擒来了。

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

二进制和我们平时用的十进制,其实并没有什么本质区别,只是平时我们是“逢十进一”,这里变成了“逢二进一”而已。每一位,相比于十进制下的 0~9 这十个数字,我们只能用 0 和 1 这两个数字。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了二进制编码的基本概念及其在计算机科学中的重要性。从整数的二进制表示出发,介绍了二进制与十进制的转换方法,以及负数的原码和补码表示方法。强调了二进制在计算机中的广泛应用,尤其是在文本字符串和乱码处理中的重要性。文章还涉及了字符集和字符编码的概念,以及不同编码方式对文本解析的影响。通过生动的例子和逻辑推理,读者能够快速了解二进制编码的基本原理和应用,以及理解二进制的“逢二进一”规则。此外,文章还提到了补码表示法对负数的优势,以及在计算中的便利性。总的来说,本文通过简洁的语言和生动的例子,帮助读者快速了解了二进制编码的基本概念和应用场景。文章内容丰富,涵盖了二进制编码的基础知识和相关概念,对于想深入了解计算机科学的读者具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(71)

  • 最新
  • 精选
  • Z.Clark
    置顶
    这是因为9的ASCII码是0039,换算成二进制,就是0011 1001了

    作者回复: 👍

    2019-05-20
    38
  • 猫头鹰爱拿铁
    [-5+4]补=[-5]补+[4]补=[1011+0100]补=[1111]补 原码1001

    作者回复: 👍

    2019-05-20
    2
    38
  • czh
    1.原码表示法有一个很直观的缺点就是,0 可以用两个不同的编码来表示,1000 代表 0, 0000 也代表 0。 2. 用补码来表示负数,使得我们的整数相加变得很容易,不需要做任何特殊处理,只是把它当成普通的二进制相加,就能得到正确的结果。 3. 我们日常说的 Unicode,其实就是一个字符集,包含了 150 种语言的 14 万个不同的字符。 4. 而字符编码则是对于字符集里的这些字符,怎么一一用二进制表示出来的一个字典。我们上面说的 Unicode,就可以用 UTF-8、UTF-16,乃至 UTF-32 来进行编码,存储成二进制 5.烫的问题其实是编码和解码不一致的问题

    作者回复: 👍

    2019-11-28
    4
    32
  • lzhao
    在 ASCII 码里面,数字 9 不再像整数表示法里一样,用 0000 1001 来表示,而是用 0011 1001 来表示。 这里不明白

    作者回复: ASCII码里面的9,其实是字符串的“9”,对应的二进制里面的表示是 0011 1001

    2019-05-20
    5
    11
  • 庄风
    “就是把从右到左的第 N 位,乘上一个 2 的 N 次方”,应该是乘以2的N-1次方吧?

    作者回复: 作为程序员,所以从右到左是从第0位数起的啦。

    2019-05-20
    7
  • 焰火
    希望浩哥有空的话,可以解答一下这几天前面几章大家问的问题,因为工作太忙,很多人不可能跟进度跟的这么紧 ^_^ 谢谢~~

    作者回复: 嗯,谢谢提醒。之前一段时间在东南亚出差,所以堆积了一些消息回复得不够及时,这两天正在加紧回复大家的问题呢。

    2019-05-21
    6
  • 庄小P
    首先,“锟斤拷”的来源是这样的。如果我们想要用 Unicod...果我们想要用 Unicode 编码记录一些文本,特别是一些遗留的老字符集内的文本,但是这些字符在 Unicode 中可能并不存在。于是,Unicode 会统一把这些字符记录为FFFD 这个编码。如果用 UTF-8 的格式存储下来,就是... 这里的意思是说在文本中输入不在Unicode字符集的字符, 那这字符会长什么样子呢??老师,能不能举个例子呢。

    作者回复: 哈哈,有趣的问题,因为这个网页也是用的unicode加上utf-8,而回复里也不能放图,所以我还真没有办法给你看到。 不过stackoverflow上有人问过类似的问题,所以你可以去看这个链接,里面有不支持的文字的图 https://stackoverflow.com/questions/6276681/what-characters-are-not-present-in-unicode

    2019-05-20
    5
  • 文章中的这个写错了: “对应的二进制数,就是 1101” 应该是1011

    作者回复: 没有错哦,就是1101啊,13 = 8 + 4 + 0 + 1

    2019-05-20
    3
    3
  • 古夜
    加了笑话更有料了

    作者回复: 😀

    2019-05-20
    3
  • 小小灬厮
    开头那句话一开始我还看不懂是什么意思,看到最后那张图片把我给笑抽了,这可能是第一篇让我捧腹大笑的技术文了😂

    作者回复: 😊

    2019-12-29
    2
收起评论
显示
设置
留言
71
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部