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

版权声明:原创文章转载请注明来源 https://blog.csdn.net/LQZ8888/article/details/90510237

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

 

/* 

           函数实现 

 */

public function index()
	 {
	 	return  $this->sum(26,70);
	 }
 
	 public function sum($n,$m)
	 {
	 	$arr = [$n,$m];
	 	$str = array_sum($arr);
	 	return $str;
	 }

或者   位运算 二进制

public function day1(){
		echo $this->cplus(11, 13);
    }
    /*
     * 
     *  13 的二进制      1 1 0 1                     -----a        13
		11 的二进制         1 0 1 1                      -----b        11  

 		(a&b) <<1  ->   1 0 0 1 0             -----d         18
        a^b  ->     0 1 1 0                   -----e          6

 		(d&e) <<1  ->   0 0 1 0 0             ------f        4
        d^e  ->  1 0 1 0 0                    -----g        20

 		(f&g) <<1  ->   0 1 0 0 0             ------h        8
        f^g  ->  1 0 0 0 0                    ------i        16

 		(h&i) <<1  ->   0 0 0 0 0             ------h        0       ---- --------退出循环
        h^i  ->  1 1 0 0 0                    ------i        24
     */
    function cplus($num1, $num2) {
    	if ($num2 == 0) {
    		return $num1;
    	}
    		
    	$sum = $num1 ^ $num2;
    	$carry = ($num1 & $num2) << 1;	
    	return $this->cplus($sum, $carry);
	}

猜你喜欢

转载自blog.csdn.net/LQZ8888/article/details/90510237
今日推荐