<OFFER15> 15_NumberOf1InBinary

复制代码
 1 // 面试题15:二进制中1的个数
 2 // 题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如
 3 // 把9表示成二进制是1001,有2位是1。因此如果输入9,该函数输出2。
 4 
 5 #include <cstdio>
 6 
 7 int NumberOf1_Solution1(int n)
 8 {
 9     int count = 0;
10     unsigned int flag = 1;
11     while (flag)
12     {
13         if (n & flag)
14             count++;
15 
16         flag = flag << 1;
17     }
18 
19     return count;
20 }
21 
22 int NumberOf1_Solution2(int n)
23 {
24     int count = 0;
25 
26     while (n)
27     {
28         ++count;
29         n = (n - 1) & n;
30     }
31 
32     return count;
33 }
34 
35 // ====================测试代码====================
36 void Test(int number, unsigned int expected)
37 {
38     int actual = NumberOf1_Solution1(number);
39     if (actual == expected)
40         printf("Solution1: Test for %p passed.\n", number);
41     else
42         printf("Solution1: Test for %p failed.\n", number);
43 
44     actual = NumberOf1_Solution2(number);
45     if (actual == expected)
46         printf("Solution2: Test for %p passed.\n", number);
47     else
48         printf("Solution2: Test for %p failed.\n", number);
49 
50     printf("\n");
51 }
52 
53 int main(int argc, char* argv[])
54 {
55     // 输入0,期待的输出是0
56     Test(0, 0);
57 
58     // 输入1,期待的输出是1
59     Test(1, 1);
60 
61     // 输入10,期待的输出是2
62     Test(10, 2);
63 
64     // 输入0x7FFFFFFF,期待的输出是31
65     Test(0x7FFFFFFF, 31);
66 
67     // 输入0xFFFFFFFF(负数),期待的输出是32
68     Test(0xFFFFFFFF, 32);
69 
70     // 输入0x80000000(负数),期待的输出是1
71     Test(0x80000000, 1);
72 
73     return 0;
74 }
View Code
复制代码

 

posted @   清风oo  阅读(121)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示