ws影子舞 2023-11-03 10:10 采纳率: 88.9%
浏览 31
已结题

c++模拟4bit加法器

要求如图
请编程实现4比特加法器,要求如下:
1)定义一个枚举类型BIT,表示1比特数,代码如下:typedef enum BIT{Zero,One};
2)定义一个数组类型FOUR表示4比特数,代码如下:typedef BIT FOUR[4]; 下面的代码定义了一个四比特数X,并初始化为0110:FOUR X={Zero,One,One,Zero};下面的代码将X修改为101

img

img

img

  • 写回答

5条回答 默认 最新

  • 技术宅program 2023-11-03 10:28
    关注
    #include <iostream>
    using namespace std;
    
    //定义一个枚举类型BIT,表示1比特数
    typedef enum BIT{Zero,One} BIT;
    
    //定义一个数组类型FOUR表示4比特数
    typedef BIT FOUR[4];
    
    //编写一个函数,在控制台上输出一个四比特数
    void print_four(FOUR X){
        for(int i=3;i>=0;i--){
            cout<<X[i];
        }
    }
    
    //编写三个函数,分别实现与门,或门以及异或门
    BIT and_gate(BIT X, BIT Y){
        if(X==One && Y==One){
            return One;
        }
        else{
            return Zero;
        }
    }
    
    BIT or_gate(BIT X, BIT Y){
        if(X==Zero && Y==Zero){
            return Zero;
        }
        else{
            return One;
        }
    }
    
    BIT xor_gate(BIT X, BIT Y){
        if(X==Y){
            return Zero;
        }
        else{
            return One;
        }
    }
    
    //编写一个函数,实现1bit半加器
    void half_adder(BIT X, BIT Y, BIT &S, BIT &C){
        S = xor_gate(X,Y); //和为异或门的输出
        C = and_gate(X,Y); //进位为与门的输出
    }
    
    //编写一个函数,实现1bit全加器
    void full_adder(BIT X, BIT Y, BIT C_in, BIT &S, BIT &C_out){
        BIT S1, C1, C2; //定义中间变量
        half_adder(X,Y,S1,C1); //调用半加器计算X和Y的和与进位
        half_adder(S1,C_in,S,C2); //调用半加器计算S1和C_in的和与进位
        C_out = or_gate(C1,C2); //进位为C1和C2的或门的输出
    }
    
    //编写一个函数,参数包括两个运算数XY以及进位,通过调用全加器计算XY的求和结果与进位,并在控制台上输出一行,显示运算数以及运算结果
    void test_one_bit_adder(BIT X, BIT Y, BIT C_in){
        BIT S, C_out; //定义输出变量
        full_adder(X,Y,C_in,S,C_out); //调用全加器计算结果
        cout<<X<<" + "<<Y<<" + "<<C_in<<" = "<<S<<" ("<<C_out<<")"<<endl; //输出格式为X + Y + C_in = S (C_out)
    }
    
    //编写一个测试1比特全加器的函数,在该函数中使用所有可能的来测试1比特全加器,并调用7) 中的函数输出结果
    void test_all_one_bit_adder(){
        cout<<"Testing 1 bit adder:"<<endl;
        test_one_bit_adder(Zero,Zero,Zero); //测试000
        test_one_bit_adder(Zero,Zero,One);  //测试001
        test_one_bit_adder(Zero,One,Zero);  //测试010
        test_one_bit_adder(Zero,One,One);   //测试011
        test_one_bit_adder(One,Zero,Zero);  //测试100
        test_one_bit_adder(One,Zero,One);   //测试101
        test_one_bit_adder(One,One,Zero);   //测试110
        test_one_bit_adder(One,One,One);    //测试111
    }
    
    //编写一个函数实现4比特加法器,函数的参数是两个FOUR类型的数据,以及一个BIT类型的数据表示进位,
    //函数的计算结果为一个FOUR类型的数据以及产生的进位。
    void four_bit_adder(FOUR X, FOUR Y, BIT C_in, FOUR &S, BIT &C_out){
        for(int i=0;i<4;i++){
            full_adder(X[i],Y[i],C_in,S[i],C_out); //从低位到高位依次调用全加器计算结果
            C_in = C_out; //将当前进位作为下一位的输入进位
        }
    }
    
    //编写一个函数,该函数8%用一个测试用例来测试4比特加法器,函数的参数是两个FOUR类型的数据,表示运算数XY。
    //该函数通过调用4比特加法器,计算X+Y的和S以及进位 ,并在控制台上输出一行,格式为XY,S
    void test_one_four_bit_adder(FOUR X, FOUR Y){
        FOUR S; //定义输出变量
        BIT C_out; //定义输出进位
        four_bit_adder(X,Y,Zero,S,C_out); //调用4比特加法器计算结果,初始进位为0
        cout<<"X = "; print_four(X); cout<<endl; //输出X
        cout<<"Y = "; print_four(Y); cout<<endl; //输出Y
        cout<<"S = "; print_four(S); cout<<endl; //输出S
        cout<<"C_out = "<<C_out<<endl; //输出C_out
    }
    
    //编写一个函数,用于测试4比特加法器,该函数通过调用10) 中的函使用多个不同的测试用例测试4比特加法器。
    void test_all_four_bit_adder(){
        cout<<"Testing 4 bit adder:"<<endl;
        FOUR X1={Zero,Zero,One,One}; //定义第一个测试用例
        FOUR Y1={One,Zero,One,Zero};
        test_one_four_bit_adder(X1,Y1); //测试第一个用例
    
        FOUR X2={One,Zero,One,One}; //定义第二个测试用例
        FOUR Y2={One,Zero,One,Zero};
        test_one_four_bit_adder(X2,Y2); //测试第二个用例
    
        FOUR X3={One,Zero,One,One}; //定义第三个测试用例
        FOUR Y3={Zero,Zero,One,Zero};
        test_one_four_bit_adder(X3,Y3); //测试第三个用例
    
        FOUR X4={One,One,One,One}; //定义第四个测试用例
        FOUR Y4={Zero,One,One,Zero};
        test_one_four_bit_adder(X4,Y4); //测试第四个用例
    }
    
    int main(){
        test_all_one_bit_adder(); //调用函数测试1比特全加器
        cout<<endl;
        test_all_four_bit_adder(); //调用函数测试4比特加法器
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 11月11日
  • 已采纳回答 11月3日
  • 创建了问题 11月3日