摘要: 如何判断一个数是2的幂,主要是要找出2的幂次方的数的特点。我们知道,1个数乘以2就是将该数左移1位,而2的0次幂为1, 所以2的n次幂(就是2的0次幂n次乘以2)就是将1左移n位, 这样我们知道如果一个数n是2的幂,则其只有首位为1,其后若干个0,必然有n & (n - 1)为0。(在求1个数的二进制表示中1的个数的时候说过,n&(n-1)去掉n的最后一个1)。因此,判断一个数n是否为2的幂,只需要判断n&(n-1)是否为0即可。实现: 1: bool powerof2(unsigned int n) 2: { 3: return ((n & (n -1)) = 阅读全文
posted @ 2012-05-11 08:37 Newerth 阅读(4735) 评论(0) 推荐(1) 编辑
摘要: 实现1:使用按位与和移位操作符,逐位进行统计。需要注意的是,对于有符号的右移操作符号位如何处理是不确定的,因此我们在进行移位操作前要将有符号型转换为无符号型。 1: int bitcount(int n) 2: { 3: unsigned int count = 0, m = n; /* 注意, 我们这里需要将输入转化为无符号类型 */ 4: 5: while (m != 0) { 6: if ((m & 0x01) == 1) { 7: ++count; 8: ... 阅读全文
posted @ 2012-05-11 08:18 Newerth 阅读(460) 评论(0) 推荐(0) 编辑