Написание немного перевернуть алгоритм

Я пытаюсь написать алгоритм для следующей задачи.

Постановка задачи.

Вам будет предоставлен список 32-битных целых чисел без знака. Вы должны вывести список целых чисел без знака, которые вы получаете, переворачивая биты в его двоичном представлении (т.е. должны быть установлены неустановленные биты, а установленные биты должны быть не установлены).

Код выглядит следующим образом:

def bit_flip(a):
    return ~a & 0xffffffff

t = raw_input("")
a = map(int, t.split())
map(lambda x: x ^ 0xffffffff, a) 
for i in a:
    print bit_flip(int(i))

Вход

3
2147483647
1
0

Вывод, который я получаю 4294967292

в то время как выход должен быть

**2147483648
  4294967294
  4294967295**

Я не уверен, где я не прав. Выходные данные близки по крайней мере к одной строке выходных данных, но не совпадают.

2 ответа

Решение

Ваш вывод правильный. 32-разрядное беззнаковое дополнение 3 это действительно 4294967292, Полный вывод вашей программы:

4294967292
2147483648
4294967294
4294967295

что правильно соответствует числам 3, 2147483647, 1, 0. Это легче увидеть, если написать их в шестнадцатеричном виде:

Dec         Hex       ~Hex      ~Dec
3           3         FFFFFFFC  4294967292
2147483647  7FFFFFFF  80000000  2147483648
1           1         FFFFFFFE  4294967294
0           0         FFFFFFFF  4294967295

Вы, кажется, дважды переворачиваете биты, но отбрасываете результаты с первого раза: map(lambda x: x ^ 0xffffffff, a) возвращает список, содержащий перевернутые значения, которые вы никому не назначаете. Если вы изменили эту строку, чтобы присвоить результат обратно aвам не нужно bit_flip больше (который также переворачивает биты, просто с помощью другого метода):

t = raw_input("")
a = map(int, t.split())
a = map(lambda x: x ^ 0xffffffff, a) 
for i in a:
    print i

Или даже короче

for i in map(lambda x: int(x) ^ 0xffffffff, raw_input("").split()):
    print i

Список, возвращенный map(lambda x: x ^ 0xffffffff, a) это ответ, но вы не используете его.

По крайней мере, в нем есть целые числа с перевернутыми битами, я не уверен, почему ожидаемый вывод имеет на один элемент меньше, чем вход.

Другие вопросы по тегам