经典面试题(五)

xiaoxiao2021-02-28  86

第九题:

判断一个数是否为2的幂次(例如1,2,4,8…..),不能使用循环。

参考代码:

#include <stdio.h> int IsPower(int n) {//判断一个数是否为2的幂次,如果是返回1,否则返回0 return 0 == (n & (n - 1)); } int main() { printf("%d\n", IsPower(4)); return 0; }

PS: 其实在说到不能用循环的时候,我一般直接想到的就是位操作,稍微试一下与或非和异或就知道了

第十题:

下面代码打印的结果是多少?

#include <stdio.h> int func(int x, int y) { return (x & y) + ((x ^ y) >> 1); } int main() { printf("%d\n", func(545, 455)); return 0; }

答案:500

PS: 通过观察我们可以发现x&y的结果为x和y相同位和的一半,x^y的结果为x和y的不同位,右移相当于除以2,所以最后结果为:(545 + 455)/ 2 = 500。

转载请注明原文地址: https://www.6miu.com/read-78594.html

最新回复(0)