核心内容摘要
DeerFlow网络配置:代理环境下搜索引擎调用技巧
题目链接
两整数之和 - 力扣LeetCode
题目要求给你两个整数a和b不使用运算符和-计算并返回两整数之和。
示例 1输入a 1, b 2输出3示例 2输入a 2, b 3输出5
解决思路分析这道题要求我们求两数之和但是又不允许使用-运算符所以我们可以使用位运算来解决这道问题本体需要使用的是异或和与位运算在位运算中存在这样两个结论①异或的结果是无进位相加的结果 ②相与的结果是各位的进位只需要将两个数异或的结果与相与的结果向左移一位再相加就是最终结果但是本体又不允许使用加减运算符而上述的两个步骤就等同于相加所以我们只需要循环重复这两个步骤知道进位为零就可以了。
算法原理①异或结果为无进位相加任何数字都可以转成二进制在二进制中如果两个数不相同异或结果就是1相同就是0相同的结果有两种“00”、“11”“00”相加结果就是0而11相加结果是进位1所以该位还是0两个不同的数字“01”异或后1相加也为1所以该位就是1由上可知异或的结果就是无进位相加的结果。
②相与的结果就是该位的进位数这点很简单如果两位都为1那么两位相加就要进1而相与后结果就是1如果两位中有一个为0相加后都不需要进位与相与结果都为0所以说相与的结果就是该位的进位数。
注意求出相与的结果后需要向左移一位再与相异的结果相加因为相与的结果是该位的进位还没进呢向左移一位就是进了。
代码展示int getSum(int a, int b) { while(b) { int x a ^ b; int carry (a b) 1; a x; b carry; } return a; }