Мне нужно преобразовать входное число с помощью битовых манипуляций.Вот правила:
- бит 0 должен быть 1;
- бит 1 должен быть перевернутым битом 2 ввода;
- бит 2 должен быть битом 1ввода;
- бит 3 должен быть перевернутым битом ввода 0.
Вот таблица перевода:
Input Input (bin) Output Output (bin)
0 0000 11 1011
1 0001 3 0011
2 0010 15 1111
3 0011 7 0111
4 0100 9 1001
5 0101 1 0001
6 0110 13 1101
................................
Вот что я пробовал:
def tr(n):
return ((n & 1 ^ 1) << 1) | ((n >> 1 & 1) << 2) | \
((n >> 2 & 1 ^ 1) << 3) | 1
tr(0)
дает правильное число: 11, но tr(1)
дает мне 9. Я сижу здесь в течение 3 часов с головной болью и не могу понять, что не так.Извините, если это что-то тривиальное или здесь какая-то глупая ошибка.Пожалуйста, помогите.