2014-11-09 5 views
0

Я из фона C и, следовательно, эту проблему в Python действительно путает меняTypeError: плохой тип операнда для унарный ~: «длинный» в Python

Рассмотрим

print ~(1 << 1) 

Это правильно печатает -3.

Рассмотрим этого

print ~(1 << 0) 

этих флаги ошибка как

TypeError: bad operand type for unary ~: 'long' 

Я проверил для различных других положительных значений счетчика сдвига и она отлично работает. Кажется, что работает только сдвиг нуля. Все подобные сообщения на унарном, что я нашел на SO, рассматриваемый с другими операторами, как +, - и т.д., но не ~

Я просто плескаться в Python каждый сейчас и потом, так что я могу отсутствовать что-то глупо, но прибегая к помощи DInt помощи гораздо

PS: Я побежал это на codeskulptor, который, вероятно, с помощью Python 2.7, я не уверен, хотя

EDIT: Это оказывается ошибкой в ​​Codeskulptor. Я написал письмо профессору Рикснеру, который является главным разработчиком, чтобы принять к сведению эту ошибку. Спасибо всем.

+0

Работает для меня (2.7.6). Какую версию python вы используете? –

+0

Кроме того, print ~ (1 << 1) синтаксически неверен в Python 3.0 и выше. 'print (~ (1 << 1))' prints -3. Работает для меня на Python 3.3. Я также запускаю его на IDEONE [здесь] (http://ideone.com/RTfUcf) – ha9u63ar

+0

@hagubear: вопрос помечен как [Python], а не [Python3]. –

ответ

2

Это ошибка при реализации CodeSkulptor.

Если заставить значение обратно в целое, он работает:

print ~(int(1 << 0)) 

Хорошо, возможно «ошибка» была слишком сильна, - глядя на их сайте, они только утверждают, что «реализовать подмножество Python 2 ".

+0

Реализация print()? Вы имеете в виду, что это было отменено? – ha9u63ar

+0

@hagubear: Нет, не печатать, но реализация кода Python CodeSkulptor корректно работает с типом 'long', по крайней мере с помощью оператора' ~ '. –

+0

ах, теперь! – ha9u63ar

0

Это работает как в Python2, так и в Python3; чтобы продемонстрировать:

$ python --version 
Python 2.7.6 
$ python -c 'print(~(1<<0))' 
-2 

$ python3 --version 
Python 3.4.2 
$ python3 -c 'print(~(1<<0))' 
-2 

Вы можете показать немного больше вашего сценария и объясните, какую версию (и реализация которых!) на Python, который вы используете?

 Смежные вопросы

  • Нет связанных вопросов^_^