首页 > 其他分享 >定点加法与减法运算

定点加法与减法运算

时间:2024-06-23 00:01:13浏览次数:9  
标签:检测 补码 借位 定点 加法 减法 进位

 

目录

1. 补码加法

2. 补码减法

3. 证书的概念与检测方法

4. 基本的二进制加法/减法器


在计算机科学领域,定点加法和减法运算是最基础的算术运算之一。本文将详细介绍如何使用补码进行加法和减法,并讨论证书的概念与检测方法,最后介绍基本的二进制加法器和减法器的工作原理。

1. 补码加法

补码(Two's Complement)是计算机表示有符号整数的一种方法。使用补码进行加法运算具有简单、统一的特点,因为它将减法运算转换为加法运算。

补码的生成

  • 对于正数,补码和原码相同。
  • 对于负数,补码为该数的原码按位取反加一。

补码加法的步骤

  1. 将两个数转换为补码形式。
  2. 将两个补码数相加,注意进位。
  3. 如果结果超出固定位数,忽略最高位的进位。
  4. 如果结果为负数,其补码形式需要解释为负数。

示例

  2 的补码(8位):00000010
-3 的补码(8位):11111101

相加:
  00000010
+ 11111101
  --------
  11111111 (补码形式的 -1)

结果 11111111 解释为补码形式的 -1

2. 补码减法

补码减法的优势在于可以将减法问题转换为加法问题,从而简化硬件电路设计。

补码减法的步骤

  1. 被减数转换为补码形式。
  2. 减数转换为补码形式后再按位取反加一,得到减数的补码形式。
  3. 将被减数和减数的补码形式相加,注意进位。
  4. 忽略最高位的进位,如果有。
  5. 结果解释为补码形式。

示例

  5 的补码(8位):00000101
  3 的补码(8位):00000011
-3 的补码(8位):11111101 (取反加一)

相加:
  00000101
+ 11111101
  --------
  00000010 (补码形式的 2)

结果 00000010 解释为补码形式的 2

3. 证书的概念与检测方法

在计算中,我们需要验证运算结果的正确性,这通常称为校验或检测。在定点运算中,常见的检测方法包括溢出检测和进位检测。

溢出检测

  • 溢出发生在两个相同符号数相加时,结果符号与原数符号不同时。
  • 溢出检测可以通过检查最高位的进位和次高位的进位是否不同来实现。

示例

  01111111 (127)
+ 00000001 (1)
  --------
  10000000 (-128)  # 此处发生溢出,正数加正数结果却为负数

进位检测

  • 进位检测用于无符号数的加法,检查最高位的进位是否为 1。
  • 如果最高位有进位,说明结果超出表示范围。

4. 基本的二进制加法/减法器

二进制加法器

  • 半加器(Half Adder):计算两个单比特的和和进位。使用异或(XOR)门计算和,使用与(AND)门计算进位。
    • 公式
          Sum = A ⊕ B
          Carry = A ∧ B

    • 全加器(Full Adder):计算两个单比特和一个进位的和和进位。由两个半加器和一个或(OR)门组成。
      • 公式
            Sum = A ⊕ B ⊕ Cin
            Carry = (A ∧ B) ∨ (Cin ∧ (A ⊕ B))

二进制减法器

  • 半减器(Half Subtractor):计算两个单比特的差和借位。使用异或(XOR)门计算差,使用与非(NAND)门计算借位。
    • 公式
          Difference = A ⊕ B
          Borrow = ¬A ∧ B

 

  • 全减器(Full Subtractor):计算两个单比特和一个借位的差和借位。由两个半减器和一个或(OR)门组成。
    • 公式
      全减器(Full Subtractor):计算两个单比特和一个借位的差和借位。由两个半减器和一个或(OR)门组成。
      公式:

标签:检测,补码,借位,定点,加法,减法,进位
From: https://blog.csdn.net/JAZJD/article/details/139890220

相关文章

  • 【减法网络】Minusformer:通过逐步学习残差来改进时间序列预测
    摘要本文发现泛在时间序列(TS)预测模型容易出现严重的过拟合。为了解决这个问题,我们采用了一种去冗余的方法来逐步恢复TS的真实值。具体来说,我们引入了一种双流和减法机制,这是一种深度Boosting集成学习方法。通过将信息聚合机制从加法转向减法,对普通的Transformer进行了改......
  • 【数据结构·队列】链队列(带头结点)模板简单应用算法设计:长整数加法计算
    目的:使用C++模板设计链队列的抽象数据类型(ADT)。并在此基础上,使用链队列ADT的基本操作,设计并实现简单应用的算法设计。内容:(1)请参照单链表的ADT模板,设计链队列的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及......
  • DC优化——数据路径提取之进位保存加法器
        进位保存加法器(CarrySaveAdder,简称CSA)是一种特殊的加法器设计,它的主要特点是在执行加法运算时,不立即处理低位产生的进位,而是将其保存下来,以便后续处理。这种方式有助于减少加法运算中的延迟,提高运算速度。    在传统的加法器(carry-propagateadders,简称CPAs)......
  • 高精度加法的实现
             这是C++算法基础-基础算法专栏的第七篇文章,专栏详情请见此处。引入    在C++语言中,int的可存储数据范围是-2147483648~2147483647,longlong的可存储数据范围是-9223372036854775808~9223372036854775807,但是如果一些数据比longlong的可存储数据......
  • #A. C08.L01.高精度加法与减法.概述
    一、高精度运算什么是高精度运算?我们都知道,数据类型是有大小范围的。整型数据int能表示的数的范围为:-2147483648至2147483647(-2^31至2^31-1)长整型数据longlong能表示的数的范围为:-9223372036854775808~9223372036854775807(-2^63至2^63-1)。那么当所要求解的数的大小还要......
  • 1120大整数加法
    没有多组输入 (还得是y总)QAQ//1.大整数加法#include<iostream>#include<vector>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B){ vector<int>C; intt=0; for(inti=0;i<A.size()||i<B.size();i......
  • 高精度+低精度加法
    #include<bits/stdc++.h>usingnamespacestd;vector<int>z(vector<int>x,inty){ vector<int>s; intsum=0; for(inti=0;i<x.size()||sum;i++){ if(i>=x.size()){ x[i]=0; } sum+=x[i]+y%10; s.push_back(sum%10); sum......
  • 计算机算法中的数字表示法——定点数
    目录1.前言2.什么是定点数3.定点数如何去表示数字4.定点数表示法的局限性1.前言前面一篇文章讲了计算机中的数字表示法:原码、补码和反码,这一篇文章开始进行定点数的讲解。2.什么是定点数定点数,从字面意思上理解就是小数点位置固定,如下图所示:数字既包括整数,又包括......
  • 四进制加法(运算符重载)
    题目描述定义一个四进制的类,重定义“+”号实现四进制数的累加。输入第一行输入所需要的四进制数的个数第二行开始,依次输入四进制数输出所有输入四进制数累加的和//输入示例:313221输出示例:102AC代码:#include<iostream>#include<string>usingnamespacestd;......
  • 高精度加法
    #include<bits/stdc++.h>usingnamespacestd;vector<int>z(vector<int>v,vector<int>n){vector<int>s;intsum=0;for(intj=0;j<v.size();j++){ sum+=v[j]+n[j]; s.push_back(sum%10); sum=sum/10; } while(......