计算机组成.计算机在计算啥.运算与ALU

  • 一身冷汗
  • 原本打算在iPad上写下一篇“处理器”。上一次用iPad写的这篇在打开浏览器后还保存着,我就直接删掉重写了。结果把原本的我的这篇给覆盖了……
  • 幸亏我有备份……
  • 不过格式还是得再MarkDown上重新调整……心好累

  • 突然发现在iPad的网页上也可以写博客哎,,这样就不用背着厚重的笔记本了
  • 写了两句就发现,在输入状态下文本编辑窗口只能保持在最高,,,这样就被虚拟键盘挡住了,,,体验-1
  • 再写两句发现又好了,,,体验+1

  • 我所认为的计算机的运算,无非就是“算数”,除了传统的加减乘除外,在二进制的表示下,还有逻辑运算与移位运算。

  • 而计算机真正的魅力在于,可以算得很快,所以承受得住我们去对每一个运算所赋予的详细含义,在各种含义下的运算互相碰撞着,也就干成了各种各样的事情。
  • 移位运算实际上是一种受限的乘除,即只能扩大缩小一定的倍数。
    • 比如1000右移一位成0100也就缩小了2倍,再移一位成0010又缩小了2倍,相对于最初缩小了4倍。
    • 那我想缩小三倍怎么办?这就是乘法和除法要做的事,其很大程度上依赖了移位运算。

定点数的运算

  • 二进制的特点是,只有1和0,也就可以把“1”对应为“逻辑真”,“0”对应为“逻辑假”
  • 真真假假与或非,假假真真门电路
  • 简单的认识一下的话,计算机内把每一位也就是每个bit用一个电位体现,当这个电位有电表示1,没电表示0
  • 所以说计算机为什么非要采用二进制而不用十进制或其他进制呢?
    • 这是因为数据中的每一位需要用一位表示的话,一个电位要表示0到9的十种状态,就要有十个电压等级,这无疑是很复杂的。
    • 而且一位表示的信息越多,其处理起来也越复杂,而二进制只有1和0,处理起来极为简单,当二进制保存的位也多,其处理的复杂在于多个位之间的联系。

门电路
  • 门电路干啥的?
    • 还记得1和0是用“有电”和“没电”来表示的吗,而门电路就是来根据有电和没电的状态来对1和0进行运算
  • 什么是运算?
    • 我说1+1=2,实际上是输入了两个值,分别是1和1,告诉说对着两个数的运算是“+”,那么我就可以得到一个输出的结果2
  • 每种门电路本身就对应了一种运算形式,最简单的门电路就是与“AND”、或“OR”、非“NOT”
    • 一般一个门电路有两根电线作为输入,有一根电线作为输出
    • 与AND:只有输入的两根电线都有电,输出的电线才有电
    • 或OR:只有输入的两根电线都没电,输出的电线才没电
    • 非NOT:只有一个输入电线,输入有电则输出没电,输入没电则输出有电
    • 有电、没电、电线都是我臆想的,实现的方法我猜大概是串并联开关啥的吧,,,作为理解尚可,而具体能否这样实现我不知道了,,,有时间打算研究一下数字电路

与或非

  • 注意,非门中真正起作用的是那个小圈圈,表示取反,常与其他门电路结合表示各种更为复杂的电路

其他门电路


逻辑运算
  • 逻辑非
    • 也就是取反,1变0,0变1 由“非门”电路实现
  • 逻辑加
    • 就是“或”,1+1=1,1+0=1,0+1=1,0+0=0。 由“或门”电路实现
  • 逻辑乘
    • 就是“与”,1·1=1,1·0=0·1=0·0=0。 由“与门”电路实现
  • 逻辑异或
    • “XOR”,其规则是1 XOR 1 = 0 XOR 0 = 0 ,1 XOR 0 = 0 XOR 1 = 1
    • 解释1:相同输出0,不同输出1。只适合两个数的时候。
    • 解释2:参与运算的1的个数为偶数输出0,为奇数输出1。 适合多个数进行XOR运算时候,比如1 XOR 0 XOR 1 = 0。
    • 异或运算有很多很好的特性,没法讲,活久见

移位运算
  • 移位运算就是按位平移,有的位会移到外面,那么就丢弃,有的位会空出来 ,那么就补0,这个绝对的“补0”是对于原码而言的。
  • 还是4 bit为例,二进制数“1000”
    • 每位起个名字,最高位w3为1,依次w2为0,w1为0,w0为0
    • 右移一位,就是让w0取w1的值,w1取w2的值,w2取w3的值,w3没地方取,就补0,变成了“0100”,视觉上就是“右移了一位”
    • 机器总是需要一个符号位来表示有符号数,而显然符号位在移位的时候并不参与,那么
  • 对于有符号数的移位操作,我们叫“算数移位”
  • 对于无符号数的移位操作,我们叫“逻辑移位”
  • 其实无论算数移位还是逻辑移位,都是一种移位的规则,只不过只有对于各自的操作数才有意义。 显然符号位的移位并没有什么意义,,,,,,当然如果有什么特殊的手法可以让符号位的移动产生重要的意义,那么当然是可以移动的。

  • 算术移位

    • 基本规则:符号位不变,移位的空位补0
    • 细则1:对于正数,无论机器内使用原码、反码还是补码表示,其都是原码的形式,因正数的原码反码补码是同样的表示,所以空位补0
    • 细则2:对于负数,原码下空位补0,反码空位补1,补码左移补0,右移补1
    • 有个表格会好理解一些,依旧是4bit,最高位符号位
数值 原码 补码 补码左移1位 左移后值 补码右移1位 右移后值
2 0010 0010 0100 4 0001 1
-2 1010 1110 1100 -4 1111 -1
  • 还有一点,就是移位的固有影响

    • 本质上是乘、除的二进制简化形式,左移一位即乘2,右移一位即除2
    • 而操作的数又是整数,那么在不断乘2(左移)的时候很可能会超过其上限而造成结果出错,而在不断除2(右移)的时候很可能有会因为原数为奇数而不能正确的得出其原值*0.5的值,表现就是取整,造成精度损失
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值