最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

python代码实现_二进制中1的个数

XAMPP案例 admin 51浏览 0评论

BA000000086

【二进制中1的个数】


题目描述

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


基础知识补充

计算机中有用三种方法:原码、反码和补码来表示有符号数,有符号数分为符号位和数值位两部分,最高位为符号位,0代表正数,1代表负数,其余为数值位。计算机皆使用补码进行计算,符号位也参与运算。

1)正数的原码、反码、补码是一致的;

2)负数的反码是对原码按位取反,补码是该数的反码加1,最高位(符号位)均不变仍为-1。

以8位二进制表示的整数举例:

1). 2的原码、反码与补码均为:00000000 00000010;

2). -2的原码:10000000 00000010,反码:11111111 11111101,补码:11111111 11111110

3). 0在计算机里分+0与-0,原码、补码、反码如下:

[+0]原码=0000 0000,[+0]反码=0000 0000,[+0]补码=0000 0000;

[-0]原码=1000 0000,[-0]反码=1111 1111,[-0]补码=0000 0000;

可见+0和-0的补码是一样的,即0的补码只有一种表示。

 

C语言中int范围和编译器有关,目前64位机器中int型占32位/4个字节,取值范围为(-2^32~2^32-1),而Python中int型整数范围是根据数值大小动态变化的,int型数值长度理论上是无限的,本题在测试时int只取到了32位。


思路

首先判断该数是否为负,若为负,找到该数的补码表示。然后该数直接与1作与操作,可得该数最后一位是否为1,为1则计数加1,不为1则对该数向右移位,如此循环。(关键点:判断正负、移位、与操作循环判断

 

# -*- coding:utf-8 -*-class Solution:    def NumberOf1(self, num):        count = 0        if num < 0:              num=num & 0xFFFFFFFF  #num为负数时,求得num的32位表示的补码            # 或者num=2**32+num        while num:            if num & 1 == 1:                count += 1            num = num >> 1        return count
s=Solution()print('-1的二进制表示中1有%d个'%s.NumberOf1(-1))print('2的二进制表示中1有%d个'%s.NumberOf1(2))# result:-1的二进制表示中1322的二进制表示中11

 

# -*- coding:utf-8 -*-class Solution:    def NumberOf1(self, num):        count = 0        if num < 0:              num=num & 0xFFFFFFFF  #num为负数时,求得num的32位表示的补码            # 或者num=2**32+num        while num:            if num & 1 == 1:                count += 1            num = num >> 1        return count
s=Solution()print('-1的二进制表示中1有%d个'%s.NumberOf1(-1))print('2的二进制表示中1有%d个'%s.NumberOf1(2))# result:-1的二进制表示中1322的二进制表示中11

转载请注明:XAMPP中文组官网 » python代码实现_二进制中1的个数