数学里面的加减乘除都是建立加法上面的。
减法:A - B = A + (-B)
乘法:A * B = B 个 A 相加
除法:A / B = A 可以减去多少个 B,又因为减法就是加法。
所以,得出结论,只要加法,就会减法、乘法、除法。
下面来看看计算机是如何进行算术运算的:
加法:比如 4+5?
计算机只认识0和1,它不知道4还有5,计算机的逻辑就是二进制,我们要把4 + 5 转换为 二进制。
4 0000 0100
5 0000 0101 +
————————
9 0000 1001
计算机内部操作原理
第一步,判断有那几位不同,也就是进行异或操作,相同取0,不相同取1.
0000 0100
0000 0101
——————
0000 0001 -------- ①
为什么要进行这些操作呢?
对于0和1,有这三种情况:
0+0 无变化
0+1 等于一
1+1 有进位
三种情况,0+0对数值没有变化,剩下的无非就是两种情况,一是1+0;二是1+1.
第一步的异或运算就是对1+0的情况进行操作。
进行** 异或 操作的原因就是要把单独的1给弄出来,保持那几个位不变,因为1+0绝对等于1,所以进行异或**操作之后,我们就可以知道那几个位是不同的,那几个位相加之后还是1,我们想把相加之后是1的位拿出来。
思考:如果没有进位,异或之后之后就是结果吗。想一想为什么呢??后面有我自己的思考。
第二步,解决1+1 的进位问题,把有一个0+1的情况剔除出去,这里使用“与”运算。
0000 0100
0000 0101
——————
0000 0100 ------- ②
第三位的时候为1,说明第三位的时候两个都为1,相加的话会有进位的情况。
第三步,向左移动一位。
对②向左移动一位,得到 0000 1000 --------③
第四步 解决了1+1的进位问题还有1+0 的问题之后,对③和①进行相加。(对③和①进行相加的原因是,对1+0和1+1的情况的合并)
相加的步骤就是对第一步到第四步循环
① 0000 0001
③ 0000 1000 异或
————————
0000 1001 ---------④
转换为10进制就是9.
与运算
0000 0001
0000 1000
——————
0000 0000
无进位,运算结束,④就是最后的答案。
减法:4-5=?计算机的实现原理。
4-5 其实就是 4+(-5)
第一步,异或运算,负数是用补码来进行运算的。
0000 0100
1111 1011
——————
1111 1111 --------- ①
第二步,进行"与"运算
0000 0100
1111 1011
——————
0000 0000
没有进位,运算结束,答案就是为①。
1111 1111为补码,转化为原码,符号位不变,其他位取反,再加上1.得到 1000 0001,转化为十进制,也就是-1。
乘法这里不做讨论,就是多个书相加。
除法: 5 / 3 = ?
上面说到,除法其实就是 一个数 能减去 另一个数 多少次,减法本质上又是加法。所以运算过程还是一样的。
5/3 其实就是 5- (+3*n + m) = 0,n代表5里面有多少个3,m代表余数。
第一步,进行“异或”运算
0000 0101
1111 1101
——————
1111 1000 --------①
第二步,进行“与”运算
0000 0101
1111 1101
——————
0000 0101 --------②
结果不为0,进行第三步运算。
第三步,进行左移一位。
0000 1010 -------③
第四步,③+①,同样先进行“异或”
1111 1000
0000 1010
——————
1111 0010 --------- ④
第五步,“与运算”,针对的是原来的③和①,(因为我们分析的是③和①的1+0 还有 1+1情况,所以每一次“与”运算针对的都是相加的两个数,“异或”后的数先留着。)
1111 1000
0000 1010
——————
0000 1000
不为零,左移一位,得到 0001 0000 -------⑤
⑤+④
第六步,异或运算
1111 0010
0001 0000
——————
1110 0010 --------⑥
第七步,“与“运算。
1111 0010
0001 0000
——————
0001 0000
不为零,说明有进位,左移一位,得到 0010 0000 ------⑦
第八步,⑥+⑦,异或 运算
1110 0010
0010 0000
——————
1100 0010 ------⑧
第九步,“与“运算。
1110 0010
0010 0000
——————
0010 0000
不为零,说明有进位,左移一位,得到 0100 0000 ------⑨
第十步,⑧+⑨,异或 运算
1100 0010
0100 0000
——————
1000 0010 --------⑩
第十一步,“与“运算。
1100 0010
0100 0000
——————
0100 0000
不为零,说明有进位,左移一位,得到 1000 0000 ------(11)
第十二步,⑩+(11),异或 运算
1000 0010
1000 0000
——————
0000 0010 --------(12)
第十三步,“与“运算。
1000 0010
1000 0000
——————
1000 0000
不为零,说明有进位,左移一位,得到 0000 0000 ------(13)
第十四步,(12)+ (13)
0000 0010
0000 0000
——————
0000 0010 -------(14)
第十五步,“与“运算。
0000 0010
0000 0000
——————
0000 0000
为零,(14)就是答案。转换位十进制 0000 00010 就是2,也就是5除以一个3还有 2,2不够除,就是余数,所以5/3 = 1 … 2。