int f(int x ,int y)
{
    return (x&y) + ((x^y)>>1)
}

f(729,271)输出是什么?

x&y表示按位与,结果是x,y相同位的一半(除以2),

x^y表示亦或,表示取x,y的不同位, 同时右移表示除以2,

相同位和不同位都取了,而且都取的是一半,因此结果是(x+y)/2,结果为500

如何将a、b的值进行交换而不用担心超界问题

方法1:a = a+b; b = a-b ; a = a-b; 缺点:a和b较大的时候,容易超界

方法2:a = a^b; b = a^b; a= a^b

,,,,};

);