class Solution {
public:
    int Add(int num1, int num2)
    {
        int a = num1;
        int b = num2;
        unsigned int m = 0x00000001;    // 位置标志
        unsigned int n = 0x00000000;    // 进位标志
        int rtn = 0x00000000;

        for (int i = 0; i < 32; i++) {
            if (bool(m&a)&&bool(b&m)) { // 该位都为1
                if (bool(n))
                    rtn = (rtn | m);    // 该位设为1
                n = m << 1; // 向左有进位
            }
            else if (bool(m&a) || bool(b&m)) {  // 只有一位为1
                if (bool(n)) {  // 有低位进位,该位为0
                    n = m << 1; // 向左有进位
                }
                else rtn = rtn | m; // 没有低维进位该位为1
            }
            else {
                if (bool(n)) rtn = (rtn | m);   // 有低位进位该位为1;
                n = 0x00000000; // 没有低位进位该位为1且不进位
            }
            m = m << 1;
        }

        return rtn;
    }
};