为什么没有 3 4 5 6 32 64 进制呢?
或者说为什么选用 8 和 16 这两个特殊的数字呢?
八进制和十六进制本质上还是二进制的扩展。事实上不仅有其他进制,效率上来说也并不是二进制最高,实际生产出来的其他进制的计算机也是有的,比如前苏联科学家就研制出了三进制计算机并且量产了。其他进制的计算机没有流行起来的原因有很多,我觉得你可以看看这个视频:
苏联的三进制电脑,为什么被二进制干掉了
计算机内部用的是2进制。所有2的幂进制都是可以对应固定的二进制位数的,比如一位4进制数对应2位二进制数,一位8进制数对应3位2进制数,一位16进制数对应4位2进制数。它们与二进制的相互转换也是比价简单的。
非2的幂进制就没有这个好处了,与二进制之间的转换也会很复杂。
使用的更好的进制,是为了表示更短,更紧凑。但是使用的数字也越多。8进制有8个数字,16进制有16个数字。但是键盘的可以使用的符号(数字、字母、符号等)是有限的。
只使用数字符号(10个),最多可以表示8进制。
只使用数字与字母(36个,不区分大小写),最多可以表示32进制。
只使用数字与字母(62个,区分大小写),最多也是可以表示32进制。
但是,当一个数字中有大量字母的时候,对人来说记住字母与数字的对应关系就变成了一件困难的事情。(注意,这些进制都是用于给人阅读与书写的)32进制需要额外记住22个对应关系,是很不方便的。而16进制只需要额外6个对应关系,就比较简单了。
在不考虑人的阅读与书写的地方,是有利用更高的进制的,比如 base32 / base64 编码,本质上用的就是 32/64 进制。base64 编码除了使用了所有数字与大小写字母之外,还另外使用了几个其他符号来凑够 64 个数字。
在计算机科学中,虽然二进制是基础的数值表示方式(因为计算机内部的电路只有两种状态:通电和断电,分别代表二进制的1和0),但在某些场景下,使用八进制(octal)和十六进制(hexadecimal)更为方便和直观。以下是选用8和16这两个特殊数字作为高进制的主要原因:
计算机操作系统
进程与线程 1. 进程 2. 线程 3. 区别 进程状态的切换 进程调度算法 1. 批处理系统 2. 交互式系统 3. 实时系统 进程同步 1. 临界区 2. 同步与互斥 3. 信号量 4. 管程 经典同步问题 1. 哲学家进餐问题 2. 读者-写者问题 进程通信 1. 管道 2. FIFO 3. 消息队列 4. 信号量 5. 共享存储 6. 套接字 进程与线程 1. 进程 进程是资源分配的基本单
编译系统 静态链接 目标文件 动态链接 编译系统 以下是一个 hello.c 程序: // c #include int main() { printf("hello, world\n"); return 0; } 在 Unix 系统上,由编译器把源文件转换为目标文件。 // bash gcc -o hello hello.c 这个过程大致如下: 预处理阶段:处理以 # 开
概述 进程管理 死锁 内存管理 设备管理 链接 参考资料 Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014. 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001. Bryant, R. E., & O’Hallaron, D. R. (2004). 深入理解
必要条件 处理方法 鸵鸟策略 死锁检测与死锁恢复 1. 每种类型一个资源的死锁检测 2. 每种类型多个资源的死锁检测 3. 死锁恢复 死锁预防 1. 破坏互斥条件 2. 破坏占有和等待条件 3. 破坏不可抢占条件 4. 破坏环路等待 死锁避免 1. 安全状态 2. 单个资源的银行家算法 3. 多个资源的银行家算法 必要条件 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。 占有和等待:已经
基本特征 1. 并发 2. 共享 3. 虚拟 4. 异步 基本功能 1. 进程管理 2. 内存管理 3. 文件管理 4. 设备管理 系统调用 大内核和微内核 1. 大内核 2. 微内核 中断分类 1. 外中断 2. 异常 3. 陷入 基本特征 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。 并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。