avatar
问个BITWISE的题目。# JobHunting - 待字闺中
C*n
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)); }
avatar
c*p
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)); }
:

avatar
C*n
3
能给简单解释下么大牛?

【在 c****p 的大作中提到】
: 如果x是2的整数幂,返回1;否则返回0。
: 很常用并且好用的一个宏,谁用谁知道。
:
: other

avatar
c*p
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 的大作中提到】
: 能给简单解释下么大牛?
avatar
C*n
5
多谢朋友!
avatar
a*m
6
返回是uint. 应该是清楚最后一个1吧。 比如 101100100 变成101100000.
avatar
c*p
7
没有检测是否为2的整数幂常用。

【在 a********m 的大作中提到】
: 返回是uint. 应该是清楚最后一个1吧。 比如 101100100 变成101100000.
avatar
a*m
8
恩。
有个用途是用来计算1的个数。

【在 c****p 的大作中提到】
: 没有检测是否为2的整数幂常用。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。