输入一个整数,求出它的二进制1的个数。考虑的知识点:负数怎么求,因为计算机中存放都是补码的形式存储一个数。因为正数的源码,反码,补码都是一样,不用考虑。但是负数就要考虑了,比如-0,它的源码应该是10000000 00000000 00000000 000000000 00000000,所以负数要考虑。
下面是代码实现:
<code>#ifndef _FINDNUMBEROF1_</code>
<code>#define _FINDNUMBEROF1_</code>
<code>/*================================ Macros ===================================*/</code>
<code>#define FALSE 0</code>
<code>#define TURE 1</code>
<code>/*================================ Function ===================================*/</code>
<code>int</code> <code>findNumberOf1(</code><code>int</code> <code>num);</code>
<code>#endif //_FINDNUMBEROF1_</code>
<code> </code>
<code>/***********************************************************/</code>
<code>/*32位平台*/</code>
<code>/*函数名:findNumberOf1*/</code>
<code>/*函数口参数:要求1的整数*/</code>
<code>/*函数返回值:返回1的个数或错误码*/</code>
<code>/*函数功能:求输入整数中二进制1的个数*/</code>
<code>int</code> <code>findNumberOf1(</code><code>int</code> <code>num)</code>
<code>{</code>
<code> </code><code>int</code> <code>retValue = 0;</code>
<code> </code><code>if</code><code>(-0 == num) </code>
<code> </code><code>{</code>
<code> </code><code>return</code> <code>1;</code>
<code> </code><code>}</code>
<code> </code><code>else</code> <code>if</code><code>(num >= 0)</code>
<code> </code><code>while</code><code>(num)</code>
<code> </code><code>{</code>
<code> </code><code>if</code><code>(1 == (num&1))</code>
<code> </code><code>{</code>
<code> </code><code>retValue++;</code>
<code> </code><code>}</code>
<code> </code><code>num >>= 1;</code>
<code> </code><code>}</code>
<code> </code><code>else</code>
<code> </code><code>num = (~num+1);</code><code>//负数以补码的方式存储,所以求源码</code>
<code> </code><code>retValue += 1;</code><code>//加符号位</code>
<code> </code><code>return</code> <code>retValue;</code>
<code>}</code>
<code>#include<stdio.h></code>
<code>#include"findNumberOf1.h"</code>
<code>static</code> <code>int</code> <code>inputNumber(</code><code>int</code> <code>*number)</code>
<code> </code><code>if</code><code>(NULL == number)</code>
<code> </code><code>{</code>
<code> </code><code>return</code> <code>FALSE;</code>
<code> </code><code>}</code>
<code> </code><code>printf</code><code>(</code><code>"请输入整数:"</code><code>);</code>
<code> </code><code>scanf</code><code>(</code><code>"%d"</code><code>,number);</code>
<code> </code><code>if</code><code>((number < -2147483648)&&(number>2147483647))</code>
<code> </code><code>printf</code><code>(</code><code>"输入的数超出范围\n"</code><code>);</code>
<code>/*函数名:main*/</code>
<code>/*函数口参数:无*/</code>
<code>/*函数返回值:0*/</code>
<code>/*函数功能:程序空*/</code>
<code>int</code> <code>main()</code>
<code> </code><code>int</code> <code>number = 0;</code>
<code> </code><code>int</code> <code>returnValue = 0;</code>
<code> </code><code>inputNumber(&number);</code>
<code> </code><code>returnValue = findNumberOf1(number);</code>
<code> </code><code>printf</code><code>(</code><code>"%d"</code><code>,returnValue);</code>
<code> </code><code>printf</code><code>(</code><code>"\n"</code><code>);</code>
<code> </code><code>system</code><code>(</code><code>"pause"</code><code>);</code>
<code> </code><code>return</code> <code>0;</code>
本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1752518,如需转载请自行联系原作者