二进制,确定某一个位值是1,计算可能的数字

该博客主要探讨了以5位二进制为例,如何通过选择和组合不同的二进制位生成不同数值的集合。函数`getNumberSet(i)`接收一个二进制位索引,删除该位后,与其他位进行求和,得到所有可能的数值集合。博客内容涉及到数组操作、子数组生成以及二进制计算,展示了数字组合的计算方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以5位二进制为例

def getNumberSet(i):
    bitNums = [1,2,4,8,16]
    #选定目标值
    flag = bitNums[i]
    #从数组中删除目标值
    del bitNums[i]
    # 目标值与数组中的每个求和
    numSet = []
    # 其他位都是0
    numSet.append(flag)
    for a in getArraySubSet(bitNums):
        if len(a) == 0:
            continue

        numSet.append(sum(a)+flag)

    return numSet

# 计算一个数组的所有子数组
def getArraySubSet(arr):
    result = [[]]
    for i in range(len(arr)):
        for j in range(len(result)):
            result.append(result[j]+[arr[i]])
    return result

结果如下:

getNumberSet(0)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31]
getNumberSet(1)
[2, 3, 6, 7, 10, 11, 14, 15, 18, 19, 22, 23, 26, 27, 30, 31]
getNumberSet(2)
[4, 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23, 28, 29, 30, 31]
getNumberSet(3)
[8, 9, 10, 11, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31]
getNumberSet(4)
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值