Другие языки программирования и технологии

как представить число в двоичном n-разрядном представлении

Даны два числа A и B. Требуется переставить биты в N-разрядном двоичном представлении этих чисел так, чтобы их поразрядная сумма (операция XOR – биты складываются попарно без переноса) была максимально возможной. Ввод: В единственной строке записаны целые числа N (1 ≤ N ≤ 64), A и B (0 ≤ A, B < 2n). Вывод: Максимальная поразрядная сумма чисел A и B в соответствии с условием.
Как представить число в двоичном представлении? Очень просто - разложить его на сумму степеней 2.
Например, 145 = 128 + 17 = 128 + 16 + 1
Каждый бит представляет собой очередную степень 2, от старшего до 1
128 : 1
64 : 0
32 : 0
16 : 1
8 : 0
4 : 0
2 : 0
1 : 1
Получается 10010001 - 8-битное число. Если тебе нужно представить его, например, в 16-битном, то добавляешь слева нули: 0000000010010001

Теперь, как переставить цифры в двух числах, чтобы их XOR - сумма была максимальной?
Тут, я думаю, ты и сам догадываешься - нужно на первый знак в одном числе ставить 0, а в другом 1,
тогда сумма этого бита будет равна 1. И так до тех пор, пока не останутся в обоих числах одинаковые биты.
Например, складываем 145 + 238 в 16-битном двоичном представлении.
145 = 0000000010010001
238 = 128 + 64 + 46 = 128 + 64 + 32 + 14 = 128 + 64 + 32 + 8 + 4 + 2 = 11101110 = 0000000011101110
Переставляем цифры. В 145 три единицы, в 238 шесть единиц. Остальные нули в обоих числах.
145 = 1110000000000000
238 = 0001111110000000
XOR = 1111111110000000 = 2^15 + 2^14 + 2^13 + 2^12 + 2^11 + 2^10 + 2^9 + 2^8 + 2^7 =
= 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 = 65408
Костя Петухов
Костя Петухов
80 733
Лучший ответ
Николай Абрамчев Превесьма благодарен, оччень ценная информация!!!

Похожие вопросы