我是新手学Python,正在使用Python 2.7版本。 当我在Python Shell中输入以下内容时:
print 01
print 010
print 0100
print 01000
它会产生这个结果
1
8
64
512
我试图理解为什么会出现这种情况,但不幸的是我没有抓住重点。
我是新手学Python,正在使用Python 2.7版本。 当我在Python Shell中输入以下内容时:
print 01
print 010
print 0100
print 01000
它会产生这个结果
1
8
64
512
我试图理解为什么会出现这种情况,但不幸的是我没有抓住重点。
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的数字。
希望这可以帮助到您!
0o
前缀;单独的前导 0
会导致语法错误。另外,你应该说明八进制数只使用数字 0 到 7。 - Tim Pietzcker在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
。因此,您可以看到,在较低的进制下,给定固定位数的情况下,您可以表示的值将减少,而符号数量也会减少。
print '01'
print '010'
等。 - Rushy Panchal