Всем доброго времени суток!
Задача: Дано целое неотрицательное число. Заменить каждую входящую в его состав 16-ричную цифру на кол-во едениц, имеющихся в его двоичном представлении. (Ну, те. цифру F заменить на 4)
З.Ы. я вообще не понимаю как с этим работать, побитовые маски, поля...
побитовые операции Си
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Во-первых, поскольку 16-ричных цифр немного (16), то предварительно можно создать массив, где каждой цифре будет ссответствовать число - количество битовых единиц:
int aBitsFerHexDigit [0x0F] = {0, 1, 1, 2, 1, 2, 6, 3, 8, 2, 2, 3, 2, 3, 3, 4};
Затем в исходном числе надо выделять 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, то выйти из цикла
все цикл;