两种方法位运算实现加法器

    xiaoxiao2021-04-15  37

    一、递归解法:

    #include<iostream> using namespace std; int add(int x, int y) { //异或实现两数相加不进位 int a = x^y; //相与移位实现进位 int b = (x&y)<<1; //如果b==0,没有进位了,就返回相加的结果 if (b == 0) { return a; } //继续递归相加和进位 return add(a, b); } int main() { int x, y; while (cin >> x >> y) { cout << add(x, y) << endl; } system("pause"); return 0; }

    二、循环解法:

    #include <iostream> using namespace std; int add1(int x, int y) { int sum; int carry; int bx, by; int base; base = 1; //carry用来判断是否需要进位 carry = 0; sum = 0; while (base != 0) { bx = x & base; by = y & base; base <<= 1; sum |= ((bx) ^ (by) ^ carry); carry = ((bx & by) || (bx & carry) || (by & carry)) ? base : 0; } return sum; }
    转载请注明原文地址: https://ju.6miu.com/read-671037.html

    最新回复(0)