Python如何解释带前导零的数字

16

我是新手学Python,正在使用Python 2.7版本。 当我在Python Shell中输入以下内容时:

print 01
print 010
print 0100
print 01000

它会产生这个结果

1
8
64
512

我试图理解为什么会出现这种情况,但不幸的是我没有抓住重点。


要打印出那些以0开头的特定数字,只需将它们作为字符串使用: print '01' print '010'等。 - Rushy Panchal
2个回答

22
如果一个数字以0开头,它就被解释为八进制,即基数为8。只需执行以下操作:

如果一个数字以0开头,它就被解释为八进制,即基数为8。只需执行:

print 1
print 10
print 100
print 1000

你的问题将会得到解决。

有关八进制更多信息,请访问:http://zh.wikipedia.org/wiki/八进制

以下是一种更易理解的八进制方式:

八进制 1 等同于十进制(通常的数字)1

八进制 2:十进制 2

...

八进制 7:十进制 7

八进制 10:十进制 8

八进制 11:十进制 9

八进制 12:十进制 10

...

八进制 17:十进制 15

八进制 20:十进制 16

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

希望这可以帮助到您!


6
顺便提一下,这仅适用于 Python 2。在 Python 3 中,必须使用 0o 前缀;单独的前导 0 会导致语法错误。另外,你应该说明八进制数只使用数字 0 到 7。 - Tim Pietzcker

10

在Python中,以0开头的数字被解释为八进制(即基数为8)。您可以使用二进制字符串10来计算基数,其中b是底数,公式为b^1 === 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始终表示十进制值1,因为对于所有的b,由于从右往左读数的数字索引从0开始,所以b^0 === 1
# 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) ,前导零就不重要了。

一个基数所需的符号数量为 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(十进制),这是在基数为8时的777,在二进制中(2^3)-1 = 7(十进制),这是在基数为2时的111。因此,您可以看到,在较低的进制下,给定固定位数的情况下,您可以表示的值将减少,而符号数量也会减少。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接