计算机的加减法

目录

计算机的加减法

1计算机的二进制:

1.1二进制转十进制

1.2十进制转二进制

1. 整数部分

2. 小数部分

2 计算机的加减法

2.1 加法

2.2 减法

2求20+21+23+……的值。

Part 1: 数学证明

Part 2:程序证明


计算机的加减法

1 计算机的二进制:

计算机使用的算法是二进制,意思就是满二就进位。

所以只能是0,1

1.1二进制转十进制

我们随便找一个十进制数:123

123 = 1 * 100 + 2 * 10 + 3 * 1

即是:

123 = 1 * (10 ^ 2) + 2 * (10 ^ 1) + 3 * (10 ^ 0)

那么二进制的数也如此,例如:

100102 = 1 * (2 ^ 4) + 0 * (2 ^3) + 0 * (2 ^ 2) + 1 * (2 ^ 1) + 0 * (2 ^ 0) = 18


1.2十进制转二进制

1. 整数部分

短除法:“除以二取余,倒序输出”

不断将原十进制数字除以二,记录余数。然后将商继续除以二,直到商为零为止。此时将整个过程中获

得的所有余数倒序输出即可。

2. 小数部分

乘以二取整,正序输出

将小数部分不断乘以二,每次取其整数部分,然后继续将剩余的小数部分继续乘以二,直至剩余的小数

部分为 0 为止(即恰好乘到 1)。


例如:

      2 |  18   ……0

      2 |   9   ……1

      2 |   4   ……0

      2 |   2   ……0

           1

于是18 = 100102


2 计算机的加减法

2.1 加法

这个直接用竖式做加法,满二进一,没什么可难的

2.2 减法

由于减法需要借位,而计算机却很烦借位,于是:

假设用A – B(均为二进制)

A – B = A +[ (1111……) – B] + 1 – 1000……

而此时,100……无需处理。

于是,便成功化简为加了。


2求2^0+2^1+2^3+……的值。

Part 1: 数学证明

解:

设S = 2^0 + 2^1 + 2^2 + ……

∴ 2S = 2^1 + 2^2 + 2^3 + ……

∵ S = 2S - S

∴ S = 2S – S = (2^1 + 2^2 + 2^3 + ……) – (2^0 + 2^1 + 2^2 + ……)

                 = (2^1 + 2^2 + 2^3 + ……) – (2^1 + 2^2 + 2^3 + ……) – 20

                 = -20

                 = -1 

∴2^0+ 2^1 + 2^2 + 2^3 + …… = -1。

可是,显而易见,这是错误的,因为加法不能把概念相加,but……


Part 2:程序证明

由于无穷大不可能,于是我们取一个较大的数来运行。

最终运行结果:

(○´・д・)ノ

其实,原因很简单,因为数组越界。

可是为什么这里越界就是-1呢?

不信你看:

而且

看来,先普及一点知识:

补码:当计算机的数据溢出时,则会去用111111……去减去这个数的二进制,并将所得的答案加1,例如:11110的补码是10

然后,我们再来分析这一题:

先转二进制:

1+2+4+…… = 1^2+10^2+100^2+……

再做加法:

此时,1+2+4+…… = 1111111……

然后,由于这个数溢出了,我们再去取他的补码。

最终一定为1,所以,答案永远是-1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值