剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]

剑指offer——二进制中1的个数(解释n & 0xFFFFFFFF)[通俗易懂]题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解答如下:环境:python2.7.3正数的原码反码补码都一样负数的补码是其对应正数的反码加1这里需要弄清楚为什么python中负数需要和0xFFFFFFFF做与操作?在计算机中,所有的数字都是使用补码存储起来的。由于Python没有位数这个概念,所以得到二进制表示需要多一点操作,即将位数限制在32位,…

大家好,又见面了,我是你们的朋友全栈君。

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

解答如下:
环境: python 2.7.3

正数的原码反码补码都一样
负数的补码是其对应正数的反码加1

这里需要弄清楚为什么python中负数需要和 0xFFFFFFFF 做与操作?
在计算机中,所有的数字都是使用补码存储起来的。由于Python没有位数这个概念,所以得到二进制表示需要多一点操作,即将位数限制在32位,通过和一个32位的全1数字按位与运算即可。对于正数来说,上面的按位与操作可以不做,因为正数的符号位为0,补码即原码,所以前面的数字全为0,按位与没有意义。但对于负数来说,直接bin(-1)是不能得到其补码的,而是得到了1的原码前面加上了负号,即-0b1。则通过和一个32位的全1数字按位与运算可得到其补码二进制表示对应的十进制数(按位与运算把符号位的1视为了数字)。
在这里插入图片描述
方法一:转换成字符串,然后统计1的个数。

class Solution:
    def NumberOf1(self, n):
        # write code here
        #与操作是对n补码的与操作
        n = 0xFFFFFFFF & n 
        count = 0
        for c in str(bin(n)):
            if c == "1":
                count += 1
        return count

方法二:按位与,统计1的个数。
这个不需要多解释,1做左移运算,右边补0,然后和n相与。

class Solution:
    def NumberOf1(self, n):
        # write code here
        count = 0
        for i in range(32):
            mask = 1 << i
            if n & mask != 0:
                count += 1
        return count

方法三:n和n-1相与
n和n-1做与操作就是把n的二进制的最后一个1变为0,知道n的二进制变为
全0,这样就统计出了1的个数。

class Solution:
    def NumberOf1(self, n):
        # write code here
        count = 0
        while n:
        	if n < 0:
        		n = 0xFFFFFFFF & n
            n = n & (n-1)
            count += 1
        return count
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145808.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月16日 下午3:20
下一篇 2022年5月16日 下午3:40


相关推荐

  • 用html设计一个网站_html个人网页中文模板

    用html设计一个网站_html个人网页中文模板多的不说,直接上网页我个人自学的,样子不是恒好看,但是可以作为作业(老师也没怎么讲,毕竟是在大学里面嘛,大部分时间都是自学罢了)这是主页面index.html<htmllang=”en”><head><metacharset=”UTF-8″><metaname=”viewport”content=”width=device-width,initial-scale=1.0″><title>

    2022年10月13日
    5
  • 数据挖掘十大算法(六):PageRank算法原理与Python实现

    数据挖掘十大算法(六):PageRank算法原理与Python实现参考 PageRank 算法从原理到实现 nbsp 零 PageRank 算法简介 PageRank 算法 即网页排名算法 由 Google 创始人 LarryPage 在斯坦福上学的时候提出来的 该算法用于对网页进行排名 排名高的网页表示该网页被访问的概率高 该算法的主要思想有两点 a 如果多个网页指向某个网页 A 则网页 A 的排名较高 b 如果排名高 A 的网页指向某个网页 B 则网页 B 的

    2026年2月19日
    2
  • Java数组去重函数方法算法「建议收藏」

    Java数组去重函数方法算法「建议收藏」关于数组去重的Java函数,网上找了许多感觉都不好,所以自己想了一个,供大家参考packagestep2;importjava.util.Arrays;//数组去重函数,TMD,我自己编写,找了半天没有一个好的程序publicclassDesign{ publicstaticvoidmain(String[]args){ int[]test={3,5,4…

    2022年6月18日
    25
  • 极电竞比分网(js逆向,webpack)「建议收藏」

    目标网站:https://www.jdj007.com/目标参数:sign全局搜索sign在第一个js文件里找到可疑加密位置通过观察sign参数可以猜到加密的最后一步可能用到了url编码,而这里可以看到encodeURIComponent,因此断定这里是加密位置。s.a.stringify(n)是加密的关键,因此首先我们要找的就是n,可以看到n=i()(t),通过断点我们可以看到t=“timestamp=1604631529347&secret=aHVheWluZ19zZWNy

    2022年4月6日
    48
  • pycharm+PyQt5+python最新开发环境配置,踩坑过程详解

    pycharm+PyQt5+python最新开发环境配置,踩坑过程详解安装工具 Pycharm 专业版 2017 3PyQT5python 测试工程文件及所需工具 下载 1 首先安装 Pycharm 先前一篇介绍安装激活成功教程版的可以参考 http www roselady vip a cangjingge boke 2018 0204 685 html2 新建一个空的 python 工程 找到 setting 安装第三方模块 PyQT5 点加号 先安 PyQT5 再安装 pyqt5 t

    2025年9月28日
    4
  • splice方法最详细最全面的解释!!!

    splice方法最详细最全面的解释!!!文章目录前言一、splice方法官方文档节选二、根据文档测试方法一:方法二:方法三:方法四:总结前言在学前端的时候一直对splice方法不太清楚,今天特意总结了一下!一、splice方法官方文档节选查阅了splice方法的示例文档,如下:(不想看论述的,可以直接跳到下面看总结!)splice返回值:Array所属对象:ArrayTheelementstoaddtothearray.Ifyoudon’tspecifyanyelements,splice

    2026年3月6日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号