0
点赞
收藏
分享

微信扫一扫

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

乐百川 2022-03-19 阅读 92
python

以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]
举报

相关推荐

0 条评论