Chinaunix首页 | 论坛 | 博客
  • 博客访问: 986541
  • 博文数量: 150
  • 博客积分: 3017
  • 博客等级: 少校
  • 技术积分: 3829
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-19 14:40
个人简介

Now in Baidu WISE team

文章分类

全部博文(150)

文章存档

2014年(8)

2013年(31)

2012年(111)

分类: C/C++

2012-10-03 14:50:57

题目:输入一个整数,求该整数的二进制表达中有多少个1。
例如输入10,由于其二进制表示为1010,有两个1,因此输出2。

难者不会,会者不难。
对于一个int n,  n&1的结果就是n转化成二进制数后的最后一位的结果。利用这个性质,有如下代码:

点击(此处)折叠或打开

  1. /*
  2.  * =====================================================================================
  3.  *
  4.  * Filename: 1counter.c
  5.  *
  6.  * Description:
  7.  *
  8.  * Version: 1.0
  9.  * Created: 10/03/2012 02:43:03 PM
  10.  * Revision: none
  11.  * Compiler: gcc
  12.  *
  13.  * Author: YOUR NAME (),
  14.  * Organization:
  15.  *
  16.  * =====================================================================================
  17.  */
  18. #include <stdlib.h>
  19. #include    <stdio.h>

  20. /*
  21.  * === FUNCTION ======================================================================
  22.  * Name: main
  23.  * Description:
  24.  * =====================================================================================
  25.  */
  26.     int
  27. main ( int argc, char *argv[] )
  28. {
  29.     int number = 11;
  30.     int count = 0;
  31.     while(number!=0){
  32.         count += (number&1);
  33.         number = number>>1;
  34.     }
  35.     printf ( "1 count = %d\n", count );
  36.     return EXIT_SUCCESS;
  37. }                /* ---------- end of function main ---------- */

阅读(784) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

runningdark2012-10-08 10:56:04

leewon1988: 如果加上符号整数呢?题目也没有要求必须是无符号整数啊!.....
没影响啊,这个是直接数number转化成2进制数后1的位数,正数负数最后都是二进制数,而且右移到最后必然成0.

leewon19882012-10-08 10:50:38

如果加上符号整数呢?题目也没有要求必须是无符号整数啊!