计算机是一个能存储数据和处理数据的机器.
那什么是二进制?
先让我们回顾下小学的数学知识: 十进制.
十进制是由0-9共10个数组成, 逢10进1的一种数学算法.
让我们再来看一张图, 如下:
算盘, 这个如意算盘是多少进制? 当然是五进制, 逢5进1.
所以二进制是什么?
答: 二进制就是由1和0两个数组成, 逢2进1的一种数学算法.
进制之间的转换
是的, 二进制和十进制之间可以是互相转换的.
准确来说任何进制之间都是可以互相转换的 (这是一个数学问题, 不是一个程序问题)
举个例子, 请看下表:
十进制 | 二进制 | 说明 |
0 | 0 | |
1 | 1 | |
2 | 10 | 1+1=2, 二进制是逢2进1, 所以结果是10 |
3 | 11 | |
4 | 100 | |
关于进制之间的转换, 我们在这里就不展开了, 有兴趣请自行搜索.
那二进制跟计算机有什么关系?
先举个例子, 水是以液体的形式存储在杯子里的.
同样: 我们的数据是以二进制的形式存储在计算机里的.
最终的解释: 存入计算机的数据只有1或0这两个数.
举个例子, 在现实生活中, 我们想记下一个数字, 用记事本记下即可, 比如写下”123456789″.
但计算机想把”123456789″存入硬盘上的话, 它会先把”123456789″转成二进制”111010110111100110100010101″再存入硬盘.
你可能会想, 为什么要这么大费周章呢?
答: 因为二进制简单, 对于电子设备来说越简单的东西越好处理. 虽然长度变长了, 但对于计算机来讲那是无所谓的, 因为它的运算速度快.
上图是以前一种常见的计算机数据存储介质: 光盘.
它的存储原理很简单:
比如它要存储这个”111010110111100110100010101″的数值,
当光盘刻录机遇到0时就跳过, 移到下一个位置, 遇到1时就往盘面上刻一个洞以代表1 (类似原始人的石壁刻字).
最后的总结: 二进制虽然对人类是不好理解的, 但对电子设备是友好的, 它既简单又好处理, 所以它成为电子设备存储和处理数据的首选.
二进制和Python
因为Python最终会帮我们把数据从十进制转换成二进制后再给计算机处理, 所以我们的代码无须做任何事情, 直接在程序里面使用十进制即可.
# 当然我们是可以使用二进制给变量赋值的
a = 0b1 # 0b开头代表后面是二进制数值
b = 0b10
c = 0b11
d = 0b100
print(a)
print(b)
print(c)
print(d)
讲了这么多, 你可能会想到一个问题, 那文字在计算机中是如何存储的?
答: 对计算机来讲, 十进制都只能转换成二进制后再存储了, 何况是文字呢.
那文字是如何转换成二进制的?
答: 使用数字编码代表, 比如用数字65代表大写字母A, 用数字98代表小写字母b (编程是区分大小写的).
这个规定数字编码对应关系的表叫做ASCII码表 (点击查看完整内容).
注: ASCII码表是1963年出的规范, 里面的文字编码仅包含了英文字母. 后来ISO组织为其扩展了一个新表, 叫Unicode码表(100%兼容ASCII码表), 里面包含了全球绝大部分语言的数字编码. 而Python3的字符串编码正是Unicode编码.
# 下面的代码将展示如何让变量[存储文字]
a = "hello" # [英文的双引号]括住你想写的文字 (因为不加的话Python会认为是个变量名)
b = 'world' # 也可以用[英文的单引号]括住文字. 通过查询ASCII码表, world最终转换的二进制数值是
# (01110111 01101111 01110010 01101100 01100100)
print(a)
print(b)