天天看点

求出整数中1的个数

输入一个整数,求出它的二进制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 &gt;= 0)</code>

<code>            </code><code>while</code><code>(num)</code>

<code>            </code><code>{</code>

<code>                </code><code>if</code><code>(1 == (num&amp;1))</code>

<code>                </code><code>{</code>

<code>                    </code><code>retValue++;</code>

<code>                </code><code>}</code>

<code>                </code><code>num &gt;&gt;= 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&lt;stdio.h&gt;</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 &lt; -2147483648)&amp;&amp;(number&gt;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(&amp;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,如需转载请自行联系原作者