如何只用逻辑运算和移位实现二进制的加法?

一.实现逻辑加法的算法

逻辑运算有与、或、非、异或四种。而要实现二进制加法最关键的步骤就是如何实现进位和相加(不进位加法).

1.用"与"来提取进位

由AND(与,下文皆称为AND)的运算性质可以得到只有当两个数都为1时才能运算得1,而这样恰好提取了进位,只要向左移位即可成功实现进位.

2.用"异或"来做不进制的加法

由XOR(异或,下文皆称为XOR)的运算性质,二者不同时为1,二者相同时为0,除了1与1相加外,本身就相当与加法的法则,而这里的进位工作由AND替代了,所以1+1确实也是0,所以就可以用作加法.

3.设计算法来进行运算

我们将相加的数与移位后的进位相加后就可得到结果了.但是由于这里不能使用相加,只能反复尝试上述运算直到不进位,最后异或即可得到结果.而于判断结束标志就是不进位也就是AND的结果为0.

4.设计算法

①.AND 提取进位 并左移一位
②.XOR 不进位相加
③.反复重复上述步骤.
④.当AND结果为0时停止.

5.C语言代码实现(初学者,勿喷= =)
include <stdio.h>

int main() {
	int A, B, a, b;
	printf("请输入两个求和的数\n");
	scanf("%d%d", &a, &b);
	do{
		A = a & b;  
		B = a ^ b;
		A = A << 1;
		a = A;
		b = B;
	} while (A != 0);
	printf("二者之和是%d", B);
	return 0;
}

这里只是为了表述清楚,中间的循环代码其实可以优化一下

do {
        A = a & b;
        b ^= a;
} while (a = (A <<= 1));

5.结语

实现加法的关键就是回归加法的本质,再去用逻辑运算实现,最后设计一个好的算法来实现只用逻辑运算和移位实现二进制的加法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值