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

程序 = 算法 + 数据结构。对应硬件,算法就是计算机指令,数据结构就对应二进制数据

计算机都是用 0 和 1 组成的二进制,表示所有信息。指令用到的机器码也是二进制表示;内存里字符串、整数、浮点数也是。

快速浏览一遍整数、文本字符串的二进制表示。遇到乱码是怎么回事儿、Unicode 和 UTF-8 之间有什么关系。

一、理解二进制的逢二进一

十进制整数,都能通过二进制表示出来。二进制对应到十进制,比如 0011 =3

把 13 这个十进制数,用短除法转化成二进制,= 1101

负数:最左侧的一位,当成是对应的正负号,比如 0 为正数,1 为负数

0011 = +3。补码1011 = -3。整数的原码表示法缺点1000 代表 0, 0000 也代表 0。

另一种表示法=-5:

最高位1必然是负,最高位 0必然是正。 0000 表示 0,1000 表示 -8。4 位二进制数,可从 -8 到 7 这 16 个整数,不会浪费一位。

 -5 + 1 = -4,-5 + 6 = 1。

字符串的表示,从编码到数字,都可用二进制表示。

二、ASCII 码

8 位二进制,表示需要所有字符(American Standard Code for Information Interchange,美国信息交换标准代码)。

ASCII 码就好比字典, 128 个不同数8 位二进制映射128 不同字符里。a 在 ASCII 里是第 97 个,二进制 0110 0001,十六进制 61。A第 65 个,二进制0100 0001,十六进制41。

ASCII ,9 不是 0000 1001,而是 0011 100115 不是用 0000 1111,两个字符 1 和 5 连续放在一起,就是 0011 0001 和 0011 0101,用两个 8 位表示。

最大的 32 位整数,2147483647。用整数只需 32 位。用字符串(多占空间)有 10 个字符,每个字符用 8 位的话,需要整整 80 位

存储数据用二进制序列化,不是简单地把数据通过 CSV 或者 JSON进行序列化。不管是整数也好,浮点数也好,采用二进制序列化会比存储文本省下不少空间。

ASCII 码只表示了 128 个字符不太够用。于是创建了对应的字符集(Charset)和字符编码(Character Encoding)。

字符集,字符的集合。比如“中文(《新华字典》里面出现的所有汉字)”就是一个字符集,“”, Unicode是字符集,150 种语言14 万个不同的字符。

字符编码:字符(字符集里)用二进制表示的字典。 Unicode可用 UTF-8、UTF-16编码储成二进制。有了 Unicode可用不止 UTF-8 一种编码形式,知道编码规则,可以正常传输、显示代码。

同样文本不同编码存储。另一个程序,不同的编码方式来进行解码和展示,就会乱码。就像密语通信,用错密码本不知所云。

搜索邮件历史出现了“锟斤拷”

想要 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 又恰好是未初始化的内存的赋值。于是,在读到没有赋值的内存地址或者变量时,电脑就开始大叫“烫烫烫”了。

课后思考

负数是原码表示,应该如何处理?如果是补码表示的呢?请你用二进制加法试着算一算,-5+4=-1,通过原码和补码是如何进行的?

[-5+4]补=[-5]补+[4]补=[1011+0100]补=[1111]补  原码1001

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容