补码加减法运算和溢出判断

在二进制计算中,如果计算结果超过计算机的位数,就会发生溢出。

设机器字长为 8 位(包括一位符号位),A = 15B = -24C = 124,求 [A+B]补[A-B]补[A+C]补[B-C]补

将十进制数转换成二进制机器数

  • [A]原 = 00001111,[A]补 = 00001111
  • [B]原 = 10011000,[B]补 = 11101000
  • [C]原 = 01111100,[C]补 = 01111100

加法和减法运算

加法运算,可以直接把两个有符号数的补码进行相加,计算第一个式子:[A+B]补 = [A]补 + [B]补 = 00001111 + 11101000 = 11110111,得到 [A+B]补 = 11110111 转换成真值为 -9,和用十进制计算 A+B 的结果一样。

减法运算,是先把它变成加法运算,然后用补码的进行加法运算,计算第二个式子:[A-B]补 = [A]补 + [-B]补 = 00001111 + 00011000 = 00100111,得到 [A-B]补 = 00100111 转换成真值为 39,和用十进制计算 A-B 的结果是一样的。

加法运算和减法运算在计算机内部都是加法运算,只是对于减法运算来说,多了一个求相反数的电路:B -> -B

溢出判断

两个机器数,进行了加减运算后,得到的结果和十进制数加减运算后的结果不一致,这就造成了溢出

  • [A+C]补 = [A]补 + [C]补 = 00001111 + 01111100 = 10001011,真值是 -11,十进制 A+C 真值是 139
  • [B-C]补 = [B]补 + [-C]补 = 11101000 + 10000100 = 01101100,真值是 108,十进制 B-C 真值是 -148

溢出的几种判断方式:

  • 采用一位符号位
  • 采用一位符号位和数据位进位
  • 采用双符号位

采用一位符号位

假设被加数的符号位为 As,加数的符号位为 Bs,结果位的符号位为 Ss

将符号位进行异或运算:V = AsBs!Ss ⊕ !As!BsSs

  • 异或运算的原理是相同得到 0,不同得到 1

    • 如果 V = 0,表示无溢出
    • 如果 V = 1,表示有溢出

采用一位符号位,根据数值位和符号位的进位情况判断溢出

假设数值位的进位为C1,符号位最高位进位为 Cs

将符号位进行异或运算:V = C1 ⊕ CS

  • 异或运算的原理是相同得到 0,不同得到 1

    • 如果 V = 0,表示无溢出
    • 如果 V = 1,表示有溢出

采用双符号位

存储在计算机内部的二进制数是正确的数据,也就是说不存在溢出的行为,所以采用一位符号位即可,比如 00001111 或者 10001111

双符号位就是在单符号位的基础上在添加一位符号位,两位符号位分别记为:S1S2

将符号位进行异或运算:V = S1 ⊕ S2

  • 异或运算的原理是相同得到 0,不同得到 1

    • 如果 V = 0,表示无溢出
    • 如果 V = 1,表示有溢出

采用双符号位的移位运算

  • 低位符号位参与移位,高位符号位代表真正的符号
  • 使用双符号位的数一般是补码

前端学习笔记
一步一个脚印

一只刚刚接触前端的小鸟

594 声望
73 粉丝
0 条评论
推荐阅读
《图解 Google V8》事件循环和垃圾回收——学习笔记(三)
这是《图解 Google V8》第三篇/共三篇:事件循环和垃圾回收这里主要讲了 2 点:事件循环:宏任务和微任务什么是微任务微任务的执行时机垃圾回收垃圾回收运行过程垃圾回收算法通过这个专栏的学习,V8 不在是个陌生...

uccs阅读 285

封面图
补计算机基础
数据存储的最小单位。在计算机中的二进制数系统中,位,简记为b,也称为比特,每个0或1就是一个位(bit)。计算机中的CPU位数指的是CPU一次能处理的最大位数二进制数系统中,位简记为b,也称为比特,每个二进制数字0...

Macrohoo1阅读 590

再快一点?动态内容如何加速
近年来 Web 3 的概念在程序员的小圈子也几乎是人尽皆知了。功能再强,噱头再足,但是如果访问速度没有跟上,一起都是浮云。哪怕拿现在已经成熟的 Web 2.0来说,内容也相当丰富,动态网页、个性化内容、电子交易数...

菜农曰阅读 956

封面图
TCP协议是如何保证数据的可靠传输的
一个数据包,从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间的发送缓冲区(send buffer),数据包在传输层添加一个TCP头部、在网络层添加一个IP首部,进入到数据链路层添加一个首部和尾部,将其...

爆裂Gopher阅读 436

封面图
三体中的人列计算机到底是啥?
大家好,我是鹤涵。大家最近看三体电视剧版本了吗?跟原著还原度非常高,甚至超过原著(画面震撼呀)!其中第15集,居然出现了冯.诺依曼+秦始皇的组合,用3000w名士兵组成了一台人形计算机。作为程序员我可不困了,...

程序员鹤涵阅读 391

封面图
GBK & UTF-8
GBK是在GB2312-80标准基础上的内码扩展规范,使用了双字节编码方案,其编码范围从8140至FEFE(剔除xx7F),共23940个码位,共收录了21003个汉字,完全兼容GB2312-80标准,支持国际标准ISO/IEC10646-1和国家标准GB...

老污的猫阅读 95

一只刚刚接触前端的小鸟

594 声望
73 粉丝
宣传栏