C语言 位运算加法

学习了位运算后总想着怎么把它用在程序中,奈何知识量有限,在这里便写一个位运算实现两数之和的功能》
首先我们得先链接位运算的三个基本操作符:

& 按位与—(有0为0,双1位1 )
I 按位或—(有1为1,双0为0)
^ 按位异或—(不同为1,相同为0)

接下来我们想要用位运算解决两数之和,得先知道他们的二进制形式。
例如:2+3=5

2 0010
3 0011
5 0101

不难看出第二位发生了进位,那么我们怎么用符号实现呢:

(2 & 3)<<1 (0010 & 0011)<<1 = 0100
2^3 0010 ^0011 = 0001
5 0100^0001 = 0101

虽然上述看似成立了,但是云算起来仍然有问题,这里仅仅考虑到了单次进位,假设有多次进位那么这个等式便不成立。
而很自然的想到连续进位那么就会联想到循环,下面这个代码便用了循环实现多次进位:

#include <stdio.h>
int main()
{
 int x, y;
 scanf_s("%d %d", &x, &y);
 
 while (x & y)//一但x&y为真就代表,存在要进位
 {
 int m = x,n = y;
 x = m^n;
 y=(m & n)<<1;
 }
  printf("%d + %d = %d\n", x, y, x ^ y);
return 0;

}

上述代码中的while的条件很好的让所有的进位都能进行。

发布了3 篇原创文章 · 获赞 6 · 访问量 201

猜你喜欢

转载自blog.csdn.net/m0_46159423/article/details/105566973