theme: condensed-night-purple
接上一篇文章的疑问,晶体管是如何进行运算的?
什么是二进制
计算机最早是机电设备,用十进制计数代表信息 比如用齿轮代表十进制。 发展到晶体管时,控制电流的开关两种状态也可以代表信息,这就是二进制,用两种状态标识
二进制只有两个数字0和1,那么怎么表示更多信息呢?和十进制一样,加位数即可。十进制(0-9)超过就在加一位表示。
十进制
比如666:由6个100,6个10和6个1加在一起就是666。1,10,100每个都是10的倍数,因为每增加一位就意味着多10个可能的数字,超过9就进1,这就是十进制
十进制的加法是满十进1,满的那个位变成0,下一位加的时候多加1
二进制
表示
也一样,意味着每个乘数都是右侧乘数的两倍(十进制是十倍)。也即是1,2,4,6.......。 比如101这个二进制,就是1个4 ,0个2和一个1,加在一起就是十进制的5。 表示的数字越大,二进制也越长,再来一个例子:10110111。就是1X128 0X64 1X32 1X16 0X8 1X4 1X2 1X1就是128 32 16 4 2 1最后结果是183.
加法
和十进制一样,只不过是满二进1。如果已经是2了还要进1就是3转换为二进制就是11,因此满的那个位数表示为1,进的1再向下传递。比如下面这个运算。
位数
二进制中一个0和1叫1“位”,上面的183用了八位。八位最小表示的数是0八位都是0,最大是255八位都是1。也就是能表示2的八次方个数字256个。
比如八位机,八位图像,八位音乐。计算机里面大部分都是8位8位处理的,但是并不够用,如下图:
字节
八位应用的如此广泛,因此出现了专门的名字叫做“字节”,1bytes(字节)=8bits(位)。十个字节就是有80位,那么千字节万字节就是八千八万位。
二进制里面一千字节等于2的十次方也就是1024字节,单位kb也是千的单位
Mega是百万字节(MB),Giga是十亿字节(GB)
32位/64位
计算机中经常听到这些词汇,32位计算机64位计算机。这是指数据被分为一块一块进行处理的,每块是32位/64位。
32位能表示的最大数是43亿也就是32个1,虽然这些数看起来很大但实际生活中我们用到的数字会更大,比如国家的国债全球人口等,因此需要用到64位。 64位表示的最大数是9.2 x 十的十八次方,目前为止够用了。
正负数
那么正负数该如何表示呢?
大部分的计算机用第一位表示正负(1负0正),剩下的31位表示数字,可以表示正的20亿~负的20亿。
非整数
也叫浮点数,因为小数点可以在数字间浮动。有好几种方式可以表示,最常见的是ieee 754标准
ieee754标准:
用类似科学计数法的方式存储十进制的值。
比如625.9 可以写成0.6259乘以十的三次方
- 有效位数:.6259
- 指数:3
在32位浮点数里面 第一位表示正负。接下来的8位存指数,剩下的23位存有效位数。
文字
计算机使用数字表示字母。
初期最直接的方式是给字母编号,比如a是1b是2c是3,英国作家弗朗西斯培根使用无位序列表示26个字母(5位是32个数字二的五次方),但是不能表示标点符号和大小写字母。
ascii 美国信息交换标准代码
发明于1963年,ascii是7位代码能够表示128个不同的值。表示的数字足够多因此也可以表示标点符号之类和特殊符号之类的
比如a是97b是95冒号是58,右小括号是41..... 特殊符号比如换行符
但是限制也明显 其是表示英文的。还记得之前说过的一个字节表示有8位吗?那么多出来的128-255之间的字符是开放给其他国家使用的
乱码~unicode
如果使用的编码方式和对应的语言不一样就会出出现乱码。亚洲的文字太多了,有成千个根本没法用8位来表示。
因此unicode出现了统一了所有语言的标准,unicode是16位的,超过一百万个位置,所有语言的字符都够了,100多种语言的字母表加起来占了12万个位置,还有位置可以放其他字符比如emojj。
其他格式的扩展
asicc使用二进制来表示字母,其他格式比如mps,gif也用二进制来编码声音颜色,表示照片,电影,音乐.....。
所有数据都只是一长串0和1
位址
计算机必须给内存中每个一位置做一个标记叫做位址目的是为了更方便的存取数据。
原文视频
【计算机科学速成课】[40集全/精校] - Crash Course ComputerScience
Youtube 原视频