二进制编码
- 1. “逢二进一”
- 2. 字符串的表示
- 参考
1. “逢二进一”
把一个二进制数对应到十进制,就是把从右到左的第 N 位,乘上一个2 的 N 次方,然后加起来,就成了一个十进制数。从右到左的位置,是从 0 开始的。
例如:
001
1
2
=
0
×
2
3
+
0
×
2
2
+
1
×
2
1
+
1
×
2
0
=
3
10
0011_{2} = 0 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0 = 3_{10}
00112=0×23+0×22+1×21+1×20=310
对应的,如果想要把一个十进制的数,转成一个二进制,使用短除法就行了。也就是,把十进制数除以 2 的余数,作为最右边的一位。然后用商继续除以 2,把对应的余数紧靠着刚才余数的右侧,这样递归迭代,直到商为 0 就可以了。
2. 字符串的表示
不仅数值可以用二进制表示,字符乃至更多的信息都能用二进制表示。
例如,字符串(Character String).最早计算机只需要使用英文字符,加上数字和一些特殊符号,然后用 8 位的二进制,就能表示日常需要的所有字符了,这个就是我们常常说的 ASCII 码(American Standard Code for Information Interchange,美国信息交换标准代码)。
ASCII 码就好比一个字典,用 8 位二进制中的 128 个不同的数,映射到 128 个不同的字符里。比如,小写字母 a 在 ASCII 里面,就是第 97 个,也就是二进制的 0110 0001,对应的十六进制表示就是 61。而大写字母 A,就是第 65 个,也就是二进制的 0100 0001,对应的十六进制表示就是 41。
不管是整数也好,浮点数也好,采用二进制序列化会比存储文本省下不少空间。
ASCII 码只表示了 128 个字符,一开始倒也堪用,毕竟计算机是在美国发明的。然而随着越来越多的不同国家的人都用上了计算机,想要表示譬如中文这样的文字,128 个字符显然是不太够用的。于是,计算机工程师们开始各显神通,给自己国家的语言创建了对应的字符集(Charset)和字符编码(Character Encoding)。
字符集,表示的可以是字符的一个集合。而字符编码则是对于字符集里的这些字符,怎么用二进制表示出来的一个字典。同样的文本,采用不同的编码存储下来。如果另外一个程序,用一种不同的编码方式来进行解码和展示,就会出现乱码。
参考
极客时间《深入浅出计算机组成原理》:http://gk.link/a/11UMi