Страница 1 из 1

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

Добавлено: 07 май 2011, 18:17
silencer
Всем доброго времени суток!
Задача: Дано целое неотрицательное число. Заменить каждую входящую в его состав 16-ричную цифру на кол-во едениц, имеющихся в его двоичном представлении. (Ну, те. цифру F заменить на 4)
З.Ы. я вообще не понимаю как с этим работать, побитовые маски, поля...

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

Добавлено: 10 май 2011, 09:40
BBB
Во-первых, поскольку 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, то выйти из цикла
все цикл;