我是靠谱客的博主 无心月饼,最近开发中收集的这篇文章主要介绍算法导论学习笔记2:二进制加法(c++实现),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

利用位运算符实现二进制加法,将结果存入size+1大小的数组中输出,代码如下:

#include<iostream>
using namespace std;
#define size 8
int c, sig = 0,location = 8;
//c为存储当前位,sig为进位标志
void binary_add(int a, int b,int arr[]){
    //当有进位时:
    if (sig == 1){
        //确定当前位
        c = a^b;
        //当两位相加后,如果不同:0/1
        if (c != sig){
            //相加:或操作
            c = c | sig;
            //标志位清除
            sig = 0;
        }
        //两位相加后与sig相同:
        else{
            //如果同为1
            if (c == sig == 1){
                //异或
                c = c^sig;
                //有进位
                sig = 1;
            }
            else{
                sig = 0;
            }
        }
        
    }
    //首次进入或者无进位直接异或得出当前位
    else{
        c = a^b;
    }
    //如果都为1进位
    if (a == 1 && b == 1){
        sig = 1;
    }
    //cout << c << endl;
    //将结果存入另一个数组
    arr[location--] = c;
}
int main(){
    int arr1[size] = { 1, 0, 1, 1, 0, 0, 1, 1 };
    int arr2[size] = { 0, 1, 0, 1, 1, 0, 1, 1 };
    int arr[size + 1];
    for (int i = size - 1; i >= 0; i--){
        binary_add(arr1[i], arr2[i],arr);
    }
    arr[0] = sig;
    cout << " ";
    for (int i = 0; i <size; i++){
        cout << arr1[i];
    }
    cout << endl;
    cout << "+";
    for (int i = 0; i <size; i++){
        cout << arr2[i];
    }
    cout << endl;
    cout << "——————————"<<endl;
    for (int i = 0; i <size+1; i++){
        cout<<arr[i];
    }
    cout << endl;
}

最后

以上就是无心月饼为你收集整理的算法导论学习笔记2:二进制加法(c++实现)的全部内容,希望文章能够帮你解决算法导论学习笔记2:二进制加法(c++实现)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部