用一个表达式,判断一个数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.

posted on 2012-11-02 16:11  吉大依恋  阅读(635)  评论(0编辑  收藏  举报