例题一
不使用额外变量,通过一个表达式判断整数n是否为2^x,不能使用循环语句。
思路
2^x
= 2, 4, 8, 16 ...
,二进制形式为10, 100, 1000, 10000
,如果n减1后和n做与运算答案为0,就说明它满足2^x
。
答案
!(n&(n-1))
例题二
求f(729, 271)
:
int f(int x, int y){
return (x&y) + ((x^y) >> 1);
}
思路
x&y是相同的位与,等于x和y相同位的和的一半。(x^y)是取出x和y不同位,>>1
也相当于除以2。
所以整个表达式合起来就是x和y相同位的一半
加上x和y不同位的一半
——即x和y的和的一半
。
答案
500
此处评论已关闭