没有加法器的计算机,如何才能计算减法?

  1. 背景提要

1)计算机为什么不支持减法?

计算机以二进制保存数据,高压电流表示1,低压电流表示0,

0+0时,低压电流+低压电流,输出低压电流,所以0+0=0;

0+1时,低压电流+高压电流,输出高压电流,所以0+1=1;

1+1时,高压电流+高压电流,输出特高压电流,当检测到特高压电流时,将向下一根电路中输出高压电流,同时本电路输出低压电流,所以1+1=10,二进制10表示2;

从计算机设计开始,就不准备计算减法操作,因为无法输入负电流,同时也不支持反方向输入电流,从设计之初,就只设计了加法器,没有减法器,那么他是如何计算减法的呢?

2)计算机如何表示负数

符号位:数字在计算机中以二进制机器数进行保存,例如 00000011 代表3,100000011 代表-3,机器数的最高位代表符号位,0代表正数(+),1代表负数(-);

  1. 原码、反码、补码
  • 原码

正数:同二进制一致,符号位为0

负数:同数的绝对值的二进制一致,符号位为1

正数: 1  ->  原[00000001]
负数:-1  ->  原[10000001]
  • 反码

正数:与原码一致

负数:在原码基础上,符号位不变,其他位取反

正数: 1  ->  原[00000001]  ->  反[00000001]
负数:-1  ->  原[10000001]  ->  反[11111110]
  • 补码

正数:与原码一致

负数:在反码基础上,加1

正数: 1  ->  反[00000001]  ->  补[00000001]
负数:-1  ->  反[11111110]  ->  补[11111111]
  • 数字在计算机中存储过程

数字在计算机中存储过程图

  1. 模拟计算机减法操作

计算机在计算减法操作时,通过减一个数,就是加一个数的负数的方式,统一转换为加法操作。

1)举例 1 - 1

1 - 1 = 1 + (-1)
-> 原[00000001] + 原[10000001]
-> 反[00000001] + 反[11111110]
-> 补[00000001] + 补[11111111]
=  补[00000000] = 原[00000000] = 0

2)举例 3 - 2

3 - 2 = 3 + (-2)
-> 原[00000011] + 原[10000010]
-> 反[00000011] + 反[11111101]
-> 补[00000011] + 补[11111110]
=  补[00000001] = 原[00000001] = 1

3)举例 -3 - 2

-3 - 2 = -3 + (-2)
-> 原[10000011] + 原[10000010]
-> 反[11111100] + 反[11111101]
-> 补[11111101] + 补[11111110]
=  补[11111011] = 原[10000101] = -5
  1. 总结

1)二进制最高位表示符号位,正数位0,负数为1

2)正数的原码、反码、补码一致,三码合一

3)负数原码除符号位,取反得反码,反码加1得补码

4)两数相减相当于一个数加另一个数的负数 = 一个数的补码加另一个数的补码

5)计算机保存时,保存的是补码,计算也是按照补码计算的,结果也为补码,需转换为原码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA新视界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值