锟斤拷烫烫烫,程序 = 算法 + 数据结构。对应硬件,算法就是计算机指令,数据结构就对应二进制数据。 计算机都是用 0 和 1 组成的二进制,表示所有信息。指令用到的机器码也是二进制表示;...
详情
程序 = 算法 + 数据结构。对应硬件,算法就是计算机指令,数据结构就对应二进制数据。
计算机都是用 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 1001。15 不是用 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
您还可以搜索:锟斤拷烫烫烫到底是什么,锟斤拷烫烫烫屯屯屯,锟斤拷烫烫烫表情包,锟斤拷烫烫烫烫烫烫烫,锟斤拷烫烫烫屯屯屯什么意思,锟斤拷烫烫烫屯屯屯锘锘锘,锟斤拷烫烫烫烫烫烫,锟斤拷烫烫烫锟斤拷锟斤拷锟斤拷锟叫癸拷锟斤拷,锟斤拷烫烫烫天,锟斤拷烫烫烫烫烫烫烫烫④
推荐 : #tag #tag #tag
完全平方数是什么 完全平方数是什么东东
共同社是什么意思共同社的解释汉语词典 共同社:日本研发出新冠病毒抑制口服药 可对付所有变种