- 在我看来,计算机的二进制表示近乎神来之笔,虽然一位只有1和0两个值,要表示数据的时候也就需要更多的位来表示,但二进制带来的好处却大大超出这个弊端
- 1与0的简洁表示,使得很多问题的处理变得简单得多,越深入越深有体会
- 我大概不会深入太深,,,毕竟水平有限于课本
二进制
- 如果说平时所用的十进制是逢10进1,也就是当9再增加的时候,就没有办法用一位来表示10,所以就向更高位进1,这也就是为什么10是写成“10”这样的原因
- 16进制表示毫无压力,一位足以表示10,也就是“a”
- 二进制表示压力很大,因为二进制是逢2进1,二进制下的“10”所表示的只是2而已,,,
- 给一张表吧
| 十进制 |
二进制 |
| 01 |
0001 |
| 02 |
0010 |
| 03 |
0011 |
| 04 |
0100 |
| 05 |
0101 |
| 06 |
0110 |
| 07 |
0111 |
| 08 |
1000 |
| 09 |
1001 |
| 10 |
1010 |
- 看吧,十进制的10在二进制的表示下要写成“1010”
- 追溯一下内在规律,所谓的进制
进制规则的内在规律
叙述中的数字若无特殊说明则为正常的十进制,,,嘿嘿嘿(●ˇ?ˇ●)
当我们说X进制的时侯,其实是说我在这种X进制的表示下,一位可以有多少种表示
- 十进制里,每一位可以表示10种,即0、1、2、3、4、5、6、7、8、9
- 二进制里,每一位可以表示2种,即0和1
- 十六进制里,除了十进制的10种外,顺次增加了a,b,c,d,e,f来表示10,11,12,13,14,15
- 再给一张表
| 十进制 |
二进制 |
十六进制 |
| 01 |
00001 |
01 |
| 04 |
00100 |
04 |
| 09 |
01001 |
09 |
| 10 |
01010 |
0a |
| 14 |
01110 |
0e |
| 15 |
01111 |
0f |
| 16 |
10000 |
10 |
- 那么对于 X进制 下的某个数字 n,其实际的值(也就是我们常用十进制下的表示)是多少呢?
- n 的最低位有 x 种变化
- n 的次低位有 x 种变化
- ……
- n的某一位要为1,那么这一位之前的所有位要遍历所有的表示方法,实在表示不了了,才交给更高的一位来表示,也就是进位
- 比如,二进制的10010表示的值是多少?
| 第4位 |
第3位 |
第2位 |
第1位 |
第0位 |
| 1 |
0 |
0 |
1 |
0 |
- X进制下所表示的值n即为 X进制下每一位的值 * X的“这一位所在的位数(从0计数)”次幂
- 对于刚刚的 二进制10010 的值n
n=1?24+0?23+0?22+1?21+0?20
n=18
也就是说二进制的10010表示为十进制就是18,值也就是18
如此一来不同进制之间的转换规律也就呼之欲出了,撇下十六进制,只讲十进制与二进制的转换
- 表示方法规范化一下
- 对于一个十进制数字n,(n1)x表示n1为n在x进制下的表示
- 如十进制数字8,(8)10的意思是8在十进制的表示下为“8”这个样子,(1000)2则表示8在二进制表示下位“1000”这个样子
- 显然,(8)10 = (1000)2,也就是虽然表示形式不同,但实际的值相同,都是你的手指头个数减去二。
- 十进制转换成二进制
- 我敢说十进制转换成任意进制都可以这样算
- 但是!!!!!!!!!
- 算起来可麻烦,于是就有各种方法来简化我们解方程的过程,但内在的规律都是这样
- 方法自行谷歌百度,大多都是除取余数,对应上内在的规律应该看得更容易一点
二进制转换十进制
- 看完了上面的我就不信你不会,当然如果我写得烂,,,那怪我,,
- (n1)2 = (n)10
- 对于二进制下的n1用w0、w1等表示其每一位(均已知)
n=w0?20+w1?21+....
十进制小数与二进制小数
- 给一个很对称的规律,详细的不讲了
- 因为只讨论小数,所以用n和n1分别表示十进制和二进制的小数部分
- 比如十进制的2.5,其小数部分就是“0.5”,3.123对应“0.123”
- 用w0表示n1小数部分的最高位,w1表示次高位,,,比如二进制“0.011”有w0=0,w1=1,w2=1
- 那么
n=w0?2?1+w1?2?2+......
- 所以二进制的“0.011”表示十进制的“0.375”
计算机的二进制
- 计算机是不表示小数点的,所以只默认实现“定点整数”或“定点小数”中一种来表示数据
- 默认你们都懂1Byte = 8bit等等基础概念了啊,,,我也就是写着玩,还不一定有人看呢=、=
- 定点整数:只记录整数部分,即10101010表示为10101010.0
- 定点小数:只记录小数部分,即10101010表示为0.10101010
- 计算机在制作的时候就选择一种来实现,一般都是定点整数吧
- 其实我也不太懂这样的区分有何意义,,,,,,巴拉巴拉能量,,,跳过不讲
- 其次还有符号,即正与负的关系
- 最高位作为符号位,0表示正,1表示负
- 0000 0001 表示 +1
- 1000 0001 表示 -1
- 然而这只是“原码”,说起来为何最高位“1”表示负数,也和“补码”有一定关系
原码、补码和反码
- 为了省事我就用 4bit 来举例
- 先给个表格,给定数字a从0000取到0111,-a表示a的相反数
| a原码 |
a值 |
a原码取反 |
a反码 |
-a补码 |
-a值 |
| 0000 |
0 |
1111 |
0000 |
0000 |
0 |
| 0001 |
1 |
1110 |
0001 |
1111 |
-1 |
| 0010 |
2 |
1101 |
0010 |
1110 |
-2 |
| 0011 |
3 |
1100 |
0011 |
1101 |
-3 |
| 0100 |
4 |
1011 |
0100 |
1100 |
-4 |
| 0101 |
5 |
1010 |
0101 |
1011 |
-5 |
| 0110 |
6 |
1001 |
0110 |
1010 |
-6 |
| 0111 |
7 |
1000 |
0111 |
1001 |
-7 |
浮点数
运算与ALU
- 逻辑、加减乘除
- 超前进位加法器
- 乘法算法、布斯算法
错误检验与数据纠错码
之后打算复习
处理器与指令流
控制器
总线
- 单总线多总线层次总线
- 总线控制
- 总线仲裁:集中(串行、定时查询、独立请求、固定时间片)分布(自举、并行竞争、冲突检测)
- 总线通信:同步和异步(单边、双边(不互锁、半互锁、全互锁))和半同步
存储器
- SRAM和DRAM
- 主存
- Cache高速缓存
- 原理:局部性
- 两种结构(透过、旁观)与三大方面(地址映像与变换、替换算法、写入策略)
- 虚拟存储器
- 多道程序下的固定、可变分区管理
- 段式、页式管理
- 页式虚存(逻辑地址与物理地址、页表、快表…)
中断控制
- 中断
- 中断屏蔽
- 8259A中断控制器(我就问是不是典型的教材内容 hhh)
计算机组成.计算机的真与假.二进制
原文:http://blog.csdn.net/stringnewname/article/details/51353269