博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer的学习笔记(C#篇)-- 二进制中1的个数
阅读量:5057 次
发布时间:2019-06-12

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

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

一 . 解题思路

        新颖的解法,使得该题目运用到了二进制的位运算符。先了解一下位运算符!

       此题便很好的发挥了位运算符&的特点,怎么想呢?这样:二进制数均是由0和1构成,当输入的参数X不等于0时,我们使用该参数X与(X-1)做&运算,运算结果如下图,可见,由于X与X-1的二进制变化是发生在X为1最后一位,即X-1在此处以后的位置均发生了改变,&运算后发现比X最后面少了一个1,因此,此时,记录一次,然后循环往复,直至X为0,记录的次数即为X中1的个数。

 

二 . 代码实现

class Solution{    public int NumberOf1(int n)    {        // write code here        //设二进制初始时1的个数为0个        int x = 0;        while(n!=0)        {            x++;            //&为二进制取位符            n=n&(n-1);        }        return x;    }}

        哇,题目一开始觉得很烦人,但代码就这么点,真的很不甘心是吗?哈哈。。

转载于:https://www.cnblogs.com/WeiMLing/p/10904811.html

你可能感兴趣的文章
疯狂java学习笔记之面向对象(七) - super关键字
查看>>
磁盘阵列
查看>>
leetcode-1-2
查看>>
linux 存取 I/O 内存
查看>>
时间同步
查看>>
通过Relect反射方法创建对象,获得对象的方法,输出对象信息
查看>>
Cognos报表打开参数
查看>>
126邮箱的格式
查看>>
ASP.NET MVC上传文件 未显示页面,因为请求实体过大。解方案
查看>>
怎样在 Mac 上打开 ~_Library 文件夹
查看>>
git常用的命令
查看>>
【转】emulator: ERROR: Could not load OpenGLES emulation library: lib64OpenglRender.so
查看>>
团队编程项目作业3-----模块开发过程
查看>>
站台查询api 据站台名称查询站台详细信息
查看>>
恶意代码功能与应对
查看>>
设置Intel网卡以抓取报文的vlan tag
查看>>
开源实时消息推送系统 MPush
查看>>
phpstorm问题
查看>>
HDU 6214【最少的最小割边数】
查看>>
J2EE的13个规范总结
查看>>