2

重複の可能性:
Python でバイナリ リテラルをどのように表現しますか?

対話型シェルを使用する場合:

print 010

8を返します。

私は以前にゼロを持つ他の数字(0110 = 72、013 = 11)を使って遊んでいましたが、それを理解できませんでした...

ここで何が起こっているのですか?

4

3 に答える 3

13

先頭にゼロを付けて入力した数値は、8 進数 (基数 8) として解釈されます。

007 == 7
010 == 8
011 == 9
于 2010-08-08T05:10:52.530 に答える
3

Python は、8 進数と 16 進数のリテラルに C の表記法を採用しまし00x

0プレフィックスはエラーが発生しやすいと見なされたため、Python 3.0 では 8 進数のプレフィックスが に変更されました0o

于 2010-08-08T05:21:26.417 に答える
3

多くの言語と同様に、先行ゼロの整数は 8 進数として解釈されます。これは、8 進法であることを意味します。たとえば、020 の 10 進値は 16 で、030 の 10 進値は 24 です。完全を期すために、このように動作します。value文字列を受け取り、8 進数として解釈されたその文字列の 10 進数値を返します。エラーチェックは行わないので、各桁が 0 から 8 の間であることを確認する必要があります。先頭の 0 は必要ありません。

    def value(s):
        digits = [int(c) for c in s]
        digits.reverse()
        return sum(d * 8**k for k, d in enumerate(digits))
于 2010-08-08T05:10:37.923 に答える