intをバイナリ文字列に再帰的に変換しようとしていますが、正のintからバイナリ文字列への変換全体がどのように機能するのかよくわかりません。
また、明らかに各位置は2の累乗の表現のようなものであることがわかりました。
上記のGoogledの例に示されているように、正のintを文字列表現に変換する方法に関する説明は非常に役立ちます。
intをバイナリ文字列に再帰的に変換しようとしていますが、正のintからバイナリ文字列への変換全体がどのように機能するのかよくわかりません。
また、明らかに各位置は2の累乗の表現のようなものであることがわかりました。
上記のGoogledの例に示されているように、正のintを文字列表現に変換する方法に関する説明は非常に役立ちます。
これは、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
(0
または1
)が表示され、i>>1
すべてのビットが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
Pythonには、そのための組み込み関数があります。
>>> bin(6)
"0b110"
そして逆に(ちょっと):
>>> 0b110
6