двоичные числа? - PullRequest
       9

двоичные числа?

3 голосов
/ 20 декабря 2010

Я использую оболочку python, чтобы выяснить, как работает команда печати в python.
Когда я набираю

print 01
1
печать 010
8
печать 0100
64
печать 030
24

Что здесь происходит?Это просто база 2?Почему «один» во второй позиции печатается как 8?Разве это не должно быть 2, если это двоичный файл?

Ответы [ 8 ]

12 голосов
/ 20 декабря 2010

Начало числа с нуля помечает его как восьмеричное в Python 2. Это было признано запутанным, удивительным и непоследовательным, так как начало с 0x помечает его как шестнадцатеричное.Поэтому в Python 3, начиная с 0, недопустимо, и вы получите восьмеричное значение, начиная с 0o.Вы также можете начать с 0b, чтобы пометить его как двоичный файл.

>>> 10
10
>>> 0x10
16
>>> 0o10
8
>>> 0b10
2
>>> 010
  File "<stdin>", line 1
    010
      ^
SyntaxError: invalid token

0x, 0o и 0b также работает в Python 2.6 и Python 2.7.

5 голосов
/ 20 декабря 2010

Это старое обозначение для восьмеричных чисел в Python.

В Python 2.6 и новее следует использовать синтаксис 0o10 для восьмеричных и 0b10010 для двоичных чисел.

В старых версиях Python двоичные числа вводятся в виде строк и разбираются в целые числа:

>>> x = int("10010", 2)
>>> print x
18
3 голосов
/ 20 декабря 2010

Предшествующий целочисленный литерал с 0 помечает его как восьмеричное.

Это значение изменило в Python 3 и не рекомендуется начиная с Python 2.6 и выше: используйте 0o... вместо.

>>> 0b1010 == 012 == 0xA == 10
True
1 голос
/ 20 декабря 2010

Когда вы добавляете 0 слева от числа, оно интерпретируется как восьмеричное число. Таким образом, 10 в восьмеричном означает 8 в десятичном виде, а 100 в восьмеричном - 64 в десятичном и так далее.

Если вы хотите работать с двоичным числом, вы должны использовать побитовые операторы для работы с битами.

0 голосов
/ 20 декабря 2010

Числа, начинающиеся с 0, интерпретируются как восьмеричные. Для двоичных чисел «начальная последовательность» равна 0b.

>>> print 0b10
2
>>> print 010
8
>>> print 0x10
16
0 голосов
/ 20 декабря 2010

Определенно, не base2.Это Восьмое - база 8.

0 голосов
/ 20 декабря 2010

Он интерпретирует их как восьмеричные (основание 8) числа, а не двоичные.

0 голосов
/ 20 декабря 2010

Как и в большинстве языков программирования, Python следует традиции чисел на C, начиная с 0, являющегося восьмеричным (основанием 8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...