Python 二进制常用方法总结

题目要求,查看二进制中1的个数

1. 转换二进制统计

bin转化为二进制

def countBinary(n):
	return bin(n).count('1')

2. 二进制移位

# int val; // input data
ans = 0
while val != 0:
    if val & 1:
    	ans += 1
    val >>= 1
    return ans

代码中val & 1表示val 与 0x000…0001(其中有31个0)进行 & 操作。
val >>= 1表示,如果val的二进制是110,则操作之后会变成011,也就是舍去最低位,然后最高位补0.
但是如果val为负数,最高位会补1,所以对于负数还是有点问题。
我们可以转换一下思路,让一个数0x01从右向左与val的每一位进行&操作来判断

def binary2(num):
    mark = 0b01
    ans = 0
    while mark <= num:
        if mark & num:
            ans += 1
        mark <<= 1
    return ans

0b二进制 0x十进制 0o二进制

3. 技巧法

对于上一种解法中,无用操作是,如果当前位是0, 还是会做判断,然后一位一位的移动。
如果,给你一种超能力,你一下可以对从右向左的第一位1直接判断,遇到0直接略过,那效率是不是很快。

现考虑二进制数:val :1101000, val-1: 1100111 那么val & (val-1) : 1100000

def countN(num):
	ans = 0
	while num:
		ans += 1
		num &= (num-1)
	return ans
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python 中可以使用内置函数 int() 和 bin() 进行进制转换。 int(x, base) 函数可以将字符串 x 转换为指定进制 base 的整数。 bin(x) 函数可以将整数 x 转换为二进制字符串。 举个例子: # 将十进制数 25 转换为二进制 print(bin(25)) # 输出 '0b11001' # 将二进制字符串 '11001' 转换为十进制数 print(int('11001', 2)) # 输出 25 如果要将其他进制的数字转换为十进制,可以使用int(x,base) 函数,base是进制,x是待转换的数字。 ### 回答2: Python中,进制转换可以使用内置的函数来实现。以下是一些常用的进制转换方法: 1. 十进制转二进制:使用`bin()`函数,将十进制数作为参数传入,返回对应的二进制字符串。 ```python num = 10 binary = bin(num) print(binary) # 输出:0b1010 ``` 2. 十进制转八进制:使用`oct()`函数,将十进制数作为参数传入,返回对应的八进制字符串。 ```python num = 10 octal = oct(num) print(octal) # 输出:0o12 ``` 3. 十进制转十六进制:使用`hex()`函数,将十进制数作为参数传入,返回对应的十六进制字符串。 ```python num = 10 hexadecimal = hex(num) print(hexadecimal) # 输出:0xa ``` 4. 二进制转十进制:使用`int()`函数,将二进制字符串和进制数(默认为10)作为参数传入,返回对应的十进制数。 ```python binary = '1010' decimal = int(binary, 2) print(decimal) # 输出:10 ``` 5. 八进制转十进制:使用`int()`函数,将八进制字符串和进制数(默认为10)作为参数传入,返回对应的十进制数。 ```python octal = '12' decimal = int(octal, 8) print(decimal) # 输出:10 ``` 6. 十六进制转十进制:使用`int()`函数,将十六进制字符串和进制数(默认为10)作为参数传入,返回对应的十进制数。 ```python hexadecimal = 'a' decimal = int(hexadecimal, 16) print(decimal) # 输出:10 ``` 除了以上的进制转换,Python还支持将其他进制转换为任意进制的功能。这可以通过先将原始数转换为十进制数,然后再转换为目标进制来实现。 ### 回答3: Python的进制转换可以通过int()函数实现,通过指定不同的base参数,可以将不同进制的数字转换为十进制数,也可以将十进制数转换为不同进制的数字。 例如,将二进制数转换为十进制数,可以使用int()函数,指定base参数为2: ``` binary_num = '1010' decimal_num = int(binary_num, 2) print(decimal_num) # 输出:10 ``` 同样地,将十进制数转换为二进制数,可以使用bin()函数: ``` decimal_num = 10 binary_num = bin(decimal_num) print(binary_num) # 输出:0b1010 ``` 除了二进制数,还可以进行八进制和十六进制的转换。 例如,将八进制数转换为十进制数,可以使用int()函数,指定base参数为8: ``` octal_num = '12' decimal_num = int(octal_num, 8) print(decimal_num) # 输出:10 ``` 同样地,将十进制数转换为八进制数,可以使用oct()函数: ``` decimal_num = 10 octal_num = oct(decimal_num) print(octal_num) # 输出:0o12 ``` 对于十六进制数的转换,同样的方法适用。只需要将base参数指定为16即可。 总结起来,Python可以通过int()函数和bin()、oct()函数,轻松实现不同进制数之间的转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting_1997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值