二进制符号数的原码、反码、补码

说明:

  1. 本文内容是本人在学习数字电子技术课程时,于数字电子技术(第十版,Thomas L. Floyd 著)中总结出的笔记,与大家分享。本人是大二菜狗,文章难免有错误纰漏之处,欢迎大家批评指正。
  2. 在本文中二进制数均使用8位数字

1 带符号二进制数

二进制符号数最左一位位符号位,0表示正,1表示负

2 二进制符号数的三种表现形式

2.1 符号数值形式

在符号数值形式下,正数和负数的数值位均为其原码,符号位0为正,1为负。

如:十进制 + 100 +100 +100 用符号数值表示为 01100100 01100100 01100100

− 100 -100 100 用符号数值表示为 11100100 11100100 11100100

2.2 反码形式

在反码形式下,正数与其符号数值形式相同,负数是其对应正数的反码。

如:反码形式中,十进制 + 100 +100 +100 表示为 01100100 01100100 01100100

− 100 -100 100 表示为 + 100 ( 01100100 ) +100(01100100) +100(01100100)的补码,即 10011100 10011100 10011100

2.3 补码形式

在补码形式下,正数与其符号数值形式和反码形式相同,负数是其对应正数的补码。

3 带符号数的算术运算

在计算机中负数均用补码形式表示,因为如果使用符号数值形式,在算术运算中会出现问题,如:

20 − 15 20-15 2015 用符号表示是:

​    00010100 00010100 00010100

+ + +   10001111 10001111 10001111

= = =   10100011 10100011 10100011

结果为 − 35 -35 35,所以不能采用直接相加的方法计算,
而对于补码形式

​      00010100 00010100 00010100

+ + +    11110001 11110001 11110001

= = =   100000101 100000101 100000101 (进位舍弃)

结果为 0000101 ( + 5 ) 0000101(+5) 0000101(+5),结果正确,可以直接利用加法器进行计算

3.1 加法

加法分为4种情况:

  1. 两个数均正

  2. 一正一负和为正

  3. 一正一负和为负

  4. 两个数均负

前两种情况结果为二进制原码,后两种情况结果为补码形式的负数(舍去最后的任何进位)。请读者自行举例验证。

个人理解: 可以将这四种情况都看做是补码加法,结果为补码。因为正数的补码是他本身,且有定理:两数补码之和等于两数之和的补码,证明见:关于“两数补码之和等于两数之和的补码”的证明

注意:两数相加可能会发生溢出情况(两数均正或均负),此时我们通过引入变形补码的方式验证是否发生溢出。

变形补码即用两个符号位来表示正负, 00 00 00 为正, 11 11 11 为负,数值位与补码形式相同,以 125 + 50 125+50 125+50 为例:

​    001111101 001111101 001111101

+ + +   000110010 000110010 000110010

= = =   010101111 010101111 010101111

最左边一位表示的是真实的符号: 00 + 00 = 0 x 00+00=0x 00+00=0x 11 + 11 = 1 x 11+11=1x 11+11=1x
而左边第二位是计算出的补码的符号位,
前两位符号位不同,则表示溢出。

3.2 减法

减法即取减数的补码后,将两数相加(舍去最后的任何进位)。

3.3 乘法

  1. 直接加法在大多数计算机中,乘法是通过加法器完成的,即一个数加上其本身,相加次数为乘数。

  2. 部分积:

    1. 确定乘积的符号
    2. 将负数转变为原码的形式(因为大多数计算机以补码形式保存负数)
    3. 模仿竖式乘法的形式进行计算
    4. 如果符号为负,则取补码转换为补码形式,如果为正就保持原码

3.4 除法

计算机中的除法运算是通过减法完成的,通过加法器来完成(因为减法也是通过加法器完成的)

基本过程:

  1. 确定除法的符号
  2. 将负数转变为原码的形式
  3. 使用补码加法将减数从被减数中除去,商加一
  4. 重复步骤二直至余数为0 或负,完成减法

例:以 12 ÷ ( − 3 ) 12\div(-3) 12÷(3) 为例

  1. 结果为负

  2. − 3 -3 3 转换为原码 10000011 10000011 10000011

  3. 使用补码加法将 − 3 -3 3 12 12 12 中减去(即 00001100 00001100 00001100 − 3 -3 3 的补码 01111101 01111101 01111101

    共减了4次,结果分别为 10001001 10001001 10001001 00000110 00000110 00000110 10000011 10000011 10000011 00000000 00000000 00000000(舍去所有的最后进位)

  4. 商为 − 4 -4 4 ,转换为补码形式为 11111100 11111100 11111100

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值