梁越

剑指48-不用加减乘除做加法

0 人看过

位运算

题目描述

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

解法1

使用位运算,具体的原理我就不深入了,我打算死记硬背,递归

class Solution {
public:
    int Add(int num1, int num2)
    {
        return num2==0?num1:Add(num1^num2, (num1&num2)<<1);
    }
};

解法2

使用字符指针的特点,例如计算1+2,1的字符指针的第二位为字符3,再将字符转为int

a+b
a+b=(int)&(char)a[b]
为了通过编译,还需要先转化为long,再转化为char

a+b=(int)(long)&((char*)(long)a)[b]

class Solution {
public:
    int Add(int num1, int num2)
    {
        return (int)(long) &((char *)(long)num1)[num2];
    }
};