【问题标题】:How does python interpret numbers with leading zeroespython如何解释带有前导零的数字
【发布时间】:2012-11-17 14:07:11
【问题描述】:

我是 python 新手,我使用的是 python 2.7 当我在 python shell 上输入这个时:

print 01
print 010
print 0100
print 01000

它给出了这个结果

1
8
64
512

我试图理解它为什么会这样,但不幸的是我没有明白这一点。

【问题讨论】:

  • 打印出那些特定的数字(如果以0开头),只需将它们用作字符串:print '01'print '010'

标签: python


【解决方案1】:

如果一个数字以0 开头,它会被解释为八进制,或以 8 为底。只需这样做:

print 1
print 10
print 100
print 1000

你的问题就解决了。

关于八进制的更多信息:http://en.wikipedia.org/wiki/Octal

这是一种更容易理解八进制的方法:

八进制 1 是十进制(普通数)1

八进制 2:十进制 2

...

八进制 7:十进制 7

八进制 10:十进制 8

八进制 11:十进制 9

八进制 12:十进制 10

...

八进制 17:十进制 15

八进制 20:十进制 16

等等。八进制只使用从 0 到 7 的数字。

希望这有帮助!

【讨论】:

  • 顺便说一句,这仅适用于 Python 2。在 Python 3 中,0o 前缀是强制性的;一个领先的0 本身就是一个SyntaxError。另外,你应该说八进制数只使用从 0 到 7 的 digits
【解决方案2】:

Python 将以0 开头的数字解释为octal,即base 8。您可以使用二进制字符串10 作为b^1 === b 计算基数,其中b 是基数。

# print the decimal value of the binary number 10
>>> print 0b10
2
# print the decimal value of the octal number 10    
>>> print 010
8
# print the decimal value of the hexadecimal number 10
>>> print 0x10
16

在任何基础上,符号1 始终是decimal1,因为对于所有bb^0 === 1 从右到左读取数字的索引从0 开始。

# print the decimal value of the binary number 1
>>> print 0b001
1
# print the decimal value of the octal number 1
>>> print 0001
1
# print the decimal value of the hexadecimal number 1
>>> print 0x001
1

一旦基数被解释 (0,0b,0x),前导 0 就不重要了。

基础所需的符号数为b,其中最大的符号等于b-1

            Base (b)   Number of Symbols (b)    Symbols (0 : b-1)
Binary      2          2                        0,1
Octal       8          8                        0,1,2,3,4,5,7,6,7
Decimal     10         10                       0,1,2,3,4,5,7,6,7,8,9

一个数字可以表示的最大值是(b^n)-1,其中n是位数。给定一个 3 位数字,最大十进制值为 (10^3)-1 = 999,八进制 (8^3)-1 = 511 (decimal) 是基数为 8 的 777,二进制 (2^3)-1 = 7 (decimal) 是基数为 2 的 111。所以你可以用更少的符号看到(较低的基数)在给定固定位数的情况下,您可以表示的值会减少。

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 2021-09-20
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多