发现了一个宝藏系列科普视频:十分钟速成课:计算机科学。每一集只有10分钟,太有趣了!国内啥时候能有这么好的科普视频啊!
作为非科班出身的程序员,这个系列视频有趣性和科普性很足,好消化好吸收,时而不时也会有一些恍然大悟的瞬间,本文就是来记录这些Spark时刻💥
1、早期人们如何计算
最早用算盘,不同列的珠子分别代表1,10和100,通过手扒拉珠子来计算。
后来人们还发明了很多机械计算设备,比如摇动齿轮的步进计算机等。但是这种机械装置很大算起来很慢。为了满足美国人口普查对计算速度的要求,有人发明了制表机,使用打孔纸带进行计算。
2、来电了之后,人们怎么计算
为了取代打孔纸带,人们必须寻找其他的控制电路开闭的开关。最开始用继电器,在电路开关附近放一个磁铁线圈,通过控制线圈的磁性,来控制电路的通断。但是这样的设备体积大,为了满足大量计算需求,需要数十万个继电器,数目多,故障次数也多。而且它吸引虫子(bug),这就是debug的来源。
后来逐渐发明了热电子管和晶体管,最后晶体管因其更小、更快、更耐用胜出。成了现代计算不可缺少的计算基础元件。制造晶体管的因特尔公司,火了就。
3、计算机存储单位
晶体管电压高于一定值表示“1”,低于一定值表示“0”。
- 位
计算机存储数据的基础单元就是位,值为0或者1。 - 字节
一个位能表达的信息太少了,因此常将单个的位连接组合起来,组成更大的存储单元,我们称这种最小组合单元为一个字节(byte),一个字节由 8 个位构成。 - 32/64位
我们通常所说的 32 位机器或者 64 位机器其实就是指CPU内部寄存器次能处理的数据大小,32 位即 4 个字节,64 位即 8 个字节。
4、二进制如何描述世界
- 浮点数怎么存
32位或者64位,分别存正负号、阶次和有效数字 - 英文字母如何处理——ASCII
美国采用ASCII码,每个ASCII码只占用一个字节,可以表示256个字符。可用于给拉丁字母和标点符号编码。 - 中文日文如何处理——Unicode
ASCII只能存256中不同的字母符号,对于中文日文等存不下。
所以全球采用了Unicode统一的编码,涵盖各国文字,还包括emoji😀
但是Unicode存在两个问题,对于英文字母只占1个字节,对于中文可能需要多个字节,那么怎么知道多个字节表示一个文字,还是分别多个文字呢。如果同一规定用4个字节,那对于一个字节就够的英文字母存储会产生很大浪费?
- UTF-8
UTF-8 就是在互联网上使用最广的一种 Unicode 的实现方式,用1~4个字节表示一个符号,根据不同的符号而变化字节长度。- 对于单字节的符号,字节的第一位设为0,后面7位为这个符号的 Unicode 码。因此对于英语字母,UTF-8 编码和 ASCII 码是相同的。
- 对于n字节的符号(n > 1),第一个字节的前n位都设为1,第n + 1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的 Unicode 码