16

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

print 01
print 010
print 0100
print 01000

它给出了这个结果

1
8
64
512

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

4

2 回答 2

22

如果数字以 开头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 的数字。

希望这有帮助!

于 2012-11-17T14:08:31.243 回答
10

0Python 解释一个以as octalwhich is开头的数字base 8。您可以使用二进制字符串10作为baseb^1 === bb计算底数。

# 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,因为b^0 === 1对于从右到左阅读的所有人来说b,数字的索引从 开始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)表示777以 8 为基数,二进制(2^3)-1 = 7 (decimal)表示111以 2 为基数。因此,您可以看到符号越少(基数越低),在给定固定数字的情况下,您可以表示的值会减少位数。

于 2012-11-17T14:18:56.787 回答