博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求二进制中1 的个数
阅读量:2725 次
发布时间:2019-05-13

本文共 868 字,大约阅读时间需要 2 分钟。

问题描述:

实现一个函数,输入一个整数,求这个整数的二进制中1的个数。

方法1

每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。
//缺点负数重1的个数不能求出,会陷入死循环

int NumOf1(int x){    int count = 0;    while (x)    {        if (x & 1 == 1)        {            count++;        }        x >>= 1;  //运算效率比除高    }    return count;}

方法二:

//缺点:需要循环32次但可以找出负数中1的个数int NumOf1(int x){    int count = 0;    int i = 0;    while (i<32)    {        if (x & 1 == 1)        {            count++;        }        x >>= 1;  //运算效率比除高        i++;    }    return count;}

方法三

//缺点:需要循环32次但可以找出负数中1的个数int NumOf1(int x){    int count = 0;    int i = 0;    int flag = 1;    while (flag)    {        if (x & flag)        {            count++;        }        flag <<=1;    }    return count;}

方法四、

原理:把一个整数减去一,再和原来的整数做与运算会把这个整数最右边的一个一变成0.

int NumOf1(int x){    int count = 0;    while (x)    {        count++;        x &= (x - 1);    }    return count;}

转载地址:http://nqstd.baihongyu.com/

你可能感兴趣的文章
BJUT数字图像处理作业
查看>>
JSP&Servlet学习笔记----第3章
查看>>
C语言写txt文件实例
查看>>
C语言读取txt文件实例
查看>>
C语言在txt文本后面添加字符串函数总结
查看>>
linux下将整数转化为字符串用法(itoa()函数,sprintf()函数)
查看>>
(转载)关于curses函数库的详细接介绍(linux环境下)
查看>>
Qt5.9布局管理器实例(QVBoxLayout,QHBoxLayout,QGridLayout)(一个简单的手写界面实例)
查看>>
[转]Myeclipse 快捷键大全
查看>>
[转]jsp-servlet技术
查看>>
[转] final、finally和finalize的区别是什么?
查看>>
发送和接收cookie
查看>>
javaBean属性对应注意点
查看>>
[转]java位操作符总结
查看>>
英文陷阱:Say uncle!叫声爷爷
查看>>
12306网站根本不懂客户需求--我的一种解决方案(二)
查看>>
12306网站根本不懂客户需求--我的一种解决方案(三)
查看>>
户籍制度阻碍改革发展
查看>>
js 中三个等号===的含义:严格等于
查看>>
java基础之面试篇四-单向链表和双向链表区别
查看>>