C*******n 发帖数: 193 | 1 The following function will return true for some numbers and false for other
numbers. Explain which ones.
unsigned int BLACKBOX(unsigned int x) { return (x)&((x)-1)); }
|
c****p 发帖数: 6474 | 2 如果x是2的整数幂,返回1;否则返回0。
很常用并且好用的一个宏,谁用谁知道。
other
【在 C*******n 的大作中提到】 : The following function will return true for some numbers and false for other : numbers. Explain which ones. : unsigned int BLACKBOX(unsigned int x) { return (x)&((x)-1)); } :
|
C*******n 发帖数: 193 | 3 能给简单解释下么大牛?
【在 c****p 的大作中提到】 : 如果x是2的整数幂,返回1;否则返回0。 : 很常用并且好用的一个宏,谁用谁知道。 : : other
|
c****p 发帖数: 6474 | 4 oops,把结果说反了。
考虑两个二进制数:
a = 1000, b = 1010;
a&(a-1) = 1000 & 0111 = 0000;
b&(b-1) = 1010 & 1001 = 0001;
证明过程我的思路是这样,假设一个数x可以表示成x = 2^k + n的形式,
其中 2^k <= x < 2^(k+1)。
若n不为0,则x - 1 = 2^k + n - 1,则 x & (x - 1) = (2^k & 2^k) + (n&(n-1)),结
果非0;
若n为0,则x - 1 = 2^k - 1 = sum(2^(k-1)+2^(k-2)...+2^0) = n',
则x & (x-1) = (1*2^k & 0*2^k) + (0 & n') = 0;
【在 C*******n 的大作中提到】 : 能给简单解释下么大牛?
|
C*******n 发帖数: 193 | |
a********m 发帖数: 15480 | 6 返回是uint. 应该是清楚最后一个1吧。 比如 101100100 变成101100000. |
c****p 发帖数: 6474 | 7 没有检测是否为2的整数幂常用。
【在 a********m 的大作中提到】 : 返回是uint. 应该是清楚最后一个1吧。 比如 101100100 变成101100000.
|
a********m 发帖数: 15480 | 8 恩。
有个用途是用来计算1的个数。
【在 c****p 的大作中提到】 : 没有检测是否为2的整数幂常用。
|