通过&^实现整数的加减乘除

mac2024-10-13  59

题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

我们可以先来观察一个计算式(都用二进制表示) 8 : 1 0 0 0 7 : 0 1 1 1 /--------------- & : 0 0 0 0 ^ : 1 1 1 1 /---------------- 8 : 1 0 0 0 从上边简单的例子可以看出,可以通过简单的按位与操作,就可以达到整数的加减乘除。

但是值得注意的是,如果按位与产生了 1 该怎么解决。下面看个简单的例子: 10: 1 0 1 0 7 : 0 1 1 1 /--------------- & : 0 0 1 0 ^ : 1 1 0 1 /--------------- 17:0001 0001 这个时候怎么办呢?这个时候就要巧妙地运用移位操作 >>,解决办法如下代码。

public static int Add(int num1, int num2) { int sum = 0; int carry = 0; do { // 异或,实现相加但不进位 sum = num1 ^ num2; // 先位与,后左移,相当于进位 carry = (num1 & num2) << 1; num1 = sum; num2 = carry; } while (num2 != 0); return num1; }
最新回复(0)