【剑指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); }
相关文章推荐
- 剑指offer——二进制中1的个数(好题,原码,反码,补码相关)
- 剑指offer——面试题10:位运算之二进制中1的个数
- (C++)剑指offer-11:二进制中1的个数(位运算)
- 剑指offer_面试题10_二进制中1的个数(位运算)
- 剑指offer-面试10:二进制中1的个数(位运算)
- 剑指offer--数组中只出现一次的数字--异或运算、二进制运用
- 剑指offer,位运算相关
- Offer题10 字母表示26进制&二进制中1的个数&位运算相关题目
- 剑指offer.二进制中1的个数(位运算)
- 剑指offer_面试题10_二进制中1的个数(位运算)
- 【剑指offer】2.4.3位运算——面试题10:二进制中1的个数
- 剑指offer面试题10:二进制中1的个数(与位运算有关)
- 【剑指Offer】二进制中1的个数(位运算)
- 剑指offer: 二进制中1的个数(位运算)
- [剑指offer][面试题10]二进制中1的个数
- 剑指 offer set 5 二进制中 1 的个数
- 剑指offer-10 二进制中1的个数
- 剑指offer--面试题10:二进制中1的个数--Java实现
- 剑指offer之二进制中1的个数
- 剑指Offer:二进制中1的个数