用一个表达式,判断一个数X是否是2^N次方,不可用循环语句。
解析:
如果一个数是2^N,那么该数的二进制表示中只有一个1,其他位均为0.
由于X和X-1做与运算,即X&(X-1)能消掉X中的一个1,若结果为0,则表示X中有且仅有一个1,
那么X是2^N。
故表达式为:!(X&(X-1))
下面代码:
int f(int x,int y)
{
return (x&y)+((x^y)>>1)
}
(729+271)=
解析:这道题如果使用本办法来求解,就都转化成二进制然后按位与。但是这样的做法显然不是面试官所期待的。
仔细观察一下题目,x&y是取相同的位与,这个的结果是x和y相同位的一半,x^y是取x和y的不同位,右移相当于除以2,
所以这个函数的功能是取二个数的平均值。(729+271)/2=500.