输出一个数的二进制序列中1的个数(三种方法)

由于这个数有可能是负数,负数在计算机中以补码的方式存储,要求负数的补码中1的个数依然可以正确输出,方法如下:

1、定义这个数的变量类型为无符号整型(unsigned int)

代码为

include<stdio.h>
int count_one_bits(unsigned value)
{
int count=0;
while(value)
{
   if(value%2==1)
   {count++;
   }
   value=value/2;
 }
return count;
}
int main()
{
unsigned int value;
int count;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}

2、定义为整型变量用“按位与”(&)的和“右移”(>>)实现。

#include<stdio.h>
int count_one_bits(int value)
{
int count=0;
int i=32;
while(i)
{
if(value&1==1)     
{                  
count++;
}
value=value>>1;
i--;
}
return count;
}
int main()
{
int value;
int count=0;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}
3、继续优化

int count_one_bits(int value)
{
int count=0;
while(value)
{
count++;
value=value&(value-1);           
}
return count;
}
int main()
{
int value;
int count=0;
scanf("%d",&value);
count=count_one_bits(value);
printf("count=%d\n",count);
return 0;
}

时间: 2024-08-08 22:09:48

输出一个数的二进制序列中1的个数(三种方法)的相关文章

位运算--统计一个数的二进制序列中1的个数

给出一个十进制数,求出该数的二进制序列中1的个数.比如 15 的二进制序列是 00000000  00000000  00000000 00001111   1的个数是4. 下边将给出几种不同的解决办法: 方法一: int count_one(int num) { int count = 0; while (num) { if (num % 2 == 1) { count++; } num = num / 2; } return count; } 由于这种方法用到了模除运算,所以这个方法只能处理

spring在xml文件中配置bean的三种方法

一.最常见,也是缺省,是调用spring的缺省工厂类 spring缺省工厂类:org.springframework.beans.factory.support.DefaultListableBeanFactory使用其静态方法preInstantiateSingletons() 配置文件中最普通最基本的定义一个普通bean<bean id="DvdTypeDAOBean" class="com.machome.dvd.impl.DvdTypeDAO" >

Openerp 中打开 URL 的三种 方法

来自:http://shine-it.net/index.php/topic,8013.0.html 最近总结了,Openerp 中打开 URL 的三种 方法: 一.在form view 添加 <a>标签 二.使用url widget, <field name="field_name" widget="url"/> 三.使用按钮,return { 'type': 'ir.actions.act_url', 'http://www.opener

C#中datatable导出excel(三种方法)

方法一:(拷贝直接可以使用,适合大批量资料, 上万笔)Microsoft.Office.Interop.Excel.Application appexcel = new Microsoft.Office.Interop.Excel.Application();SaveFileDialog savefiledialog = new SaveFileDialog();System.Reflection.Missing miss = System.Reflection.Missing.Value;ap

一个数的二进制表示中1的个数——10

实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,将9表示成二进制为1001,有2位是1,因此如果输入数字9,该函数输出2. 如果让我们将一个十进制的数转换成二进制的表示,我们就会不停的模除模除2取它的余数,因此,就可以用这样的方法解决: #include <iostream> using namespace std; size_t count_one_num(int n) {     size_t count = 0;     while(n != 0)     {      

cocos2dx中创建动画的三种方法

1.最最原始的方法,先创建动画帧,再创建动画打包(animation),再创建动画(animate) 第一步: 创建动画帧:CCSpriteFrame,依赖于原始的资源图片(xx.png,xx.jpg) CCSpriteFrame *frame1=CCSpriteFrame::create("1.png"); CCSpriteFrame *frame2=CCSpriteFrame::create("2.png"); CCSpriteFrame *frame3=CCS

mfc 在VC的两个对话框类中传递参数的三种方法

弄了好久,今天终于把在VC中的对话框类之间传递参数的问题解决了,很开心,记录如下: 1. 我所建立的工程是一个基于MFC对话框的应用程序,一共有三个对话框,第一个对话框为主对话框,所对应的类为CTMDDDlg类.在主对话框上我放置了一个标签页(Tab Control)控件,其实现的功能是当单击标签提示A时进入页面A,即对话框A(所对应的类为CDialogChild1),单击B时进入对话框B(CDialogChild2). 整个工程的框架已经设计好了,在对话框A和对话框B上放置了许多控件,现在我想

android应用中去掉标题栏的三种方法

在android中去掉标题栏有三种方法,它们也有各自的特点. 1.在代码里实现 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏 记住:这句代码要写在setContentView()前面. 2.在清单文件(manifest.xml)里面实现 <application android:icon="@drawable/icon" android:label="@string/app_name" a

linux中传文件的三种方法、windows

第一种方法:使用vsftpd服务 ftp配置文件主要内容:[[email protected] vsftpd]# cat vsftpd.conf|grep -v ^#|grep -v ^$anonymous_enable=YES #匿名登陆local_enable=YES #允许使用本地用户来登陆ftplocal_root=/var/ftp/pub #write_enable=YES #开放本地用户写的权限local_umask=022 #FTP上本地的文件权限,默认是077 anon_uplo