Странное поведение оператора Python.исключающее или
Я работаю над головоломкой шифрования и мне нужно взять исключительное или из двух двоичных чисел (я использую пакет operator в Python).  Если я запускаю operator.xor(1001111, 1100001), Например, я получаю очень странный вывод 2068086.  Почему он не возвращается 0101110 или, по крайней мере, 101110?
3 ответа:
Потому что Python не рассматривает это как двоичные числа. Вместо этого используйте:
operator.xor(0b1001111, 0b1100001)
Вычисленный ответ использует предоставленные вами десятичные значения, а не их двоичный вид. То, о чем вы действительно просите...
1001111 ^ 1100001Когда вы имеете в виду-это
79 ^ 97. Вместо этого попробуйте использовать двоичные литералы как таковые...0b1001111 ^ 0b1100001Смотрите Как вы выражаете двоичные литералы в Python? для получения дополнительной информации.
Потому что
1001111и1100001не являются двоичными числами.1001111- это миллион, тысяча, сто одиннадцать, в то время как1100001- это миллион, сто тысяч и один. Python не распознает их как двоичные числа. Двоичные числа должны иметь префикс0b, чтобы быть распознаны как двоичные числа в Python/Python 3. Итак, правильный путь таков:operator.xor(0b1001111, 0b1100001)Но эй! На выходе получаем
46. Мы должны это исправить. К счастью, есть встроенный в Python / Python 3. Это функцияbin(n). Эта функция выводит двоичное число с префиксом0b. Таким образом, наш окончательный код будет следующим:bin(operator.xor(0b1001111, 0b1100001))Если мы хотим скрыть
0b(в основном в тех случаях, когда это число выводится на экран), мы должны использовать[2:]следующим образом:bin(operator.xor(0b1001111, 0b1100001))[2:]Более короткий путь (предупреждение выглядит как учебник для чего-то, что вы *должны * уже знать)
Ну,operator.xor()слишком большой для оператора:)
Если это так (99,9%), вместо этого вы должны использоватьa^b. Я думаю, ты уже знаешь. но почему для того чтобы импортировать весь модуль только для оператора XOR? Если вы хотите ввести словоxorвместо этого, импортируйте модульoperatorследующим образом:from operator import a, b.... Затем используйте примерно следующее:bin(xor(a,b)). Я надеюсь, что вы уже знаете, что вещи, но я хочу убедиться, что вы любите кодирование еще больше :)