Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63612
  • 博文数量: 8
  • 博客积分: 134
  • 博客等级: 入伍新兵
  • 技术积分: 66
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-04 23:21
个人简介

这个个人很懒,什么也没留!

文章分类

全部博文(8)

文章存档

2014年(1)

2013年(4)

2012年(3)

我的朋友

分类: C/C++

2012-09-10 00:14:21

求下面函数的返回值(微软) -- 统计1的个数
-------------------------------------
int func(int x)
{
    int countx = 0;
    while(x)
    {
        countx++;
        x = x&(x-1);
    }
    return countx;
}
假定x = 9999
10011100001111
答案: 8
思路: 将x转化为2进制,看含有的1的个数。
注: 每执行一次x = x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。
判断一个数(x)是否是2的n次方
-------------------------------------
#include
int func(int x)
{
    if( (x&(x-1)) == 0 )
        return 1;
    else
        return 0;
}
int main()
{
    int x = 8;
    printf("%d\n", func(x));
}
注:
(1) 如果一个数是2的n次方,那么这个数用二进制表示时其最高位为1,其余位为0。
(2) == 优先级高于 &

阅读(1444) | 评论(0) | 转发(0) |
0

上一篇:#progma详解

下一篇:hex,bin,axf,elf的区别

给主人留下些什么吧!~~