0

我正在尝试将 int 递归转换为二进制字符串,但我并不真正了解整个正整数到二进制字符串转换的工作原理。

还发现显然每个位置都代表了 2 的幂。

如上面的谷歌示例所示,任何关于如何将正整数转换为字符串表示的解释都非常有帮助。

4

2 回答 2

6

这是将 int 转换为二进制字符串的递归实现,这是我认为这个问题所要求的:

def recursive_bin(i):
    if i == 0:
        return ''
    elif i < 0:
        return '-' + recursive_bin(-i)
    else:
        return recursive_bin(i>>1) + str(i&1)

请注意,这仅作为递归练习有用,如果您只是想获取二进制字符串,请使用内置bin()函数。

这是有效的,因为i&1会给你最后一位i(要么01),并将i>>1所有位i向右移动一位(相当于除以 2)。这是对 6 (110 2 ) 的解释:

# 6 is 110 in binary
recursive_bin(6)
recursive_bin(6>>1) + str(6 & 1)        -> recursive_bin(3) + '0'
recursive_bin(3>>1) + str(3 & 1) + '0'  -> recursive_bin(1) + '1' + '0'
recursive_bin(1>>1) + str(1 & 1) + '10' -> recursive_bin(0) + '1' + '10'
recursive_bin(0) + '110'                -> '' + '110'
# Final result is '110', since the base case of 0 returns an empty string
于 2012-11-28T00:06:30.907 回答
4

Python 有一个内置函数:

>>> bin(6)
"0b110"

反过来(有点):

>>> 0b110
6
于 2012-11-28T00:06:09.827 回答