您的位置:首页 > Web前端

【剑指offer】位运算相关-二进制中1的个数10

2014-03-06 00:36 225 查看
#include<iostream.h>
#include <stdio.h>
int NumberOf1(int n)
{
int count=0;
unsigned int flag=1;
while(flag)
{
if(n&flag)
count++;
flag=flag<<1;
}
return count;
}
//二进制中1的个数
int NumberOf2(int n)
{
int count=0;
while(n)
{
count++;
//把一个整数减去1再和原来的整数做位与运算,
//得到的结果相当于把整数的二进制表示中最右边一个1变成0
n=(n-1)&n;  //&运算:有0为0
}
return count;
}
void Test(int number, unsigned int expected)
{
unsigned int actual = NumberOf1(number);
if(actual == expected)
printf("Solution1: Test for %p passed.\n", number);
else
printf("Solution1: Test for %p failed.\n", number);
cout<<actual<<endl;

actual = NumberOf2(number);
if(actual == expected)
printf("Solution2: Test for %p passed.\n", number);
else
printf("Solution2: Test for %p failed.\n", number);
cout<<actual<<endl;
printf("\n");
}

void main()
{
// 输入0,期待的输出是0
Test(0, 0);

// 输入1,期待的输出是1
Test(1, 1);

// 输入10,期待的输出是2
Test(10, 2);

// 输入0x7FFFFFFF,期待的输出是31
Test(0x7FFFFFFF, 31);

// 输入0xFFFFFFFF(负数),期待的输出是32
Test(0xFFFFFFFF, 32);

// 输入0x80000000(负数),期待的输出是1
Test(0x80000000, 1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: