【发布时间】:2012-08-06 07:41:41
【问题描述】:
这个问题在一次采访中被问到。
如何检查数字是否为 2^n 格式 {1, 2, 4, 8, 16, 32, ....}
不使用*、/、+、-、% 运算符?
你也不能使用循环。
【问题讨论】:
-
没有循环?那么 32 个 if 语句呢? :-)
标签: c math logic bit-manipulation
这个问题在一次采访中被问到。
如何检查数字是否为 2^n 格式 {1, 2, 4, 8, 16, 32, ....}
不使用*、/、+、-、% 运算符?
你也不能使用循环。
【问题讨论】:
标签: c math logic bit-manipulation
检查二进制表示中是否恰好设置了一位。
【讨论】:
N & (N-1) 零”如果一个人实际上是为了效率而不是随机的面试问题要求。
使用旧的 n & (n - 1) == 0,以不使用运算符 - 的方式进行转换。
int powerOfTwo(int number)
{
int numberMinusOne = --number;
++number;
if (number == 0)
return 0;
return (number & numberMinusOne) == 0;
}
【讨论】:
-会带来性能提升吗?