学习了位运算后总想着怎么把它用在程序中,奈何知识量有限,在这里便写一个位运算实现两数之和的功能》
首先我们得先了解位运算的三个基本操作符:
& | 按位与—(有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 |
虽然上述看似成立了,但是运算起来仍然有问题,这里仅仅考虑到了单次进位,假设有多次进位那么这个等式便不成立。
而很自然的想到连续进位那么就会联想到循环,下面这个代码便用了循环实现多次进位&