Python统计二进制中1的个数

这篇博客介绍了如何在Python中统计一个整数(包括正数和负数的补码)转为二进制后的1的个数。首先讲解了进制转换、原码、反码和补码的概念,然后提供了两种解法。解法1通过将二进制数转化为字符串并遍历计数,而解法2则利用位运算进行统计。
摘要由CSDN通过智能技术生成

应用案例

现有一个整数,将该整数转化为二进制形式,并统计二进制中1的个数(如果是负数,按补码统计1的个数)

涉及知识点讲解

进制介绍

在计算机中,有四种进制,分别是 2进制、8进制、10进制和16进制。具体内容如下所示:

进制类型 组成 代码格式
2进制 由2个数字组成,有0 和 1 0b101
8进制 由8个数字组成,有0,1,2,3,4,5,6,7 0o127
10进制 有10个数字组成,有0,1,2,3,4,5,6,7,8,9 258
16进制 有16个数字组成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f (字母不区分大小写, a至f分别代表10,11,12,13,14,15) 0xff、0Xff、0XFF

进制转换

Python中常用的内置进制转换函数如下所示:

  1. bin(x): 将 x 转换为2进制;
  2. oct(x): 将 x 转换为8进制;
  3. int(x, base=10): 将 x 转为 10 进制;
  4. hex(x): 将 x 转为 16 进制;

原码、反码、补码介绍

计算机使用一定的编码方式对数据进行存储。原码、反码、补码是机器存储一个具体数字的编码方式。具体使用方式整理如下:

  1. 正数的原码、反码、补码都相同;
  2. 负数的反码在原码的基础上保持符号位不变,其余位取反;
  3. 负数的补码在反码的基础上+1;

eg:

+1 -1
原码 0000 0001 1000 0001
反码 0000 0001 1111 1110
补码 0000 0001 1111 1111

位运算规则

含义 Python表示 规则说明
按位与 a & b 同时为1,则为1
按位或 a | b 有1则为1
按位异或 a ^ b 相同为0,不同为1
按位取反 ~a 0变1,1变0
左移 a << b a × 2**b
右移 a >> b a / 2**b

解法1

思路分析

首先需将整数转换成二进制,转换时考虑正整数和负整数两种情况:

  • 如果是正整数,直接转换成二进制即可;
  • 如果是负整数,需求出该数对应的补码,以便后期解题;

难点:Python中如何让对一个负整数求补码?

等全部转换成二进制后

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值