побитовые операции Си

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
silencer
Сообщения: 7
Зарегистрирован: 07 мар 2011, 20:58

Всем доброго времени суток!
Задача: Дано целое неотрицательное число. Заменить каждую входящую в его состав 16-ричную цифру на кол-во едениц, имеющихся в его двоичном представлении. (Ну, те. цифру F заменить на 4)
З.Ы. я вообще не понимаю как с этим работать, побитовые маски, поля...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Во-первых, поскольку 16-ричных цифр немного (16), то предварительно можно создать массив, где каждой цифре будет ссответствовать число - количество битовых единиц:
int aBitsFerHexDigit [0x0F] = {0, 1, 1, 2, 1, 2, 6, 3, 8, 2, 2, 3, 2, 3, 3, 4};

Затем в исходном числе надо выделять 16-ричные цифры и формировать результат.
Цифры выделять последовательным получением остатка от деления на 16.
Т.е. примерно так:

Код: Выделить всё

результат = 0;
цикл
  взять от исходного числа остаток от деления на 16
  результат = результат * 16 + aBitsFerHexDigit [остаток от деления на 16]
  исходное число [целочисленно] поделить  на 16
  Если результат деления 0, то выйти из цикла
все цикл;
Ответить