Скажем, у меня есть целое число, названное 'счетом', который похож на это:
int score = 1529587;
Теперь то, что я хочу сделать, получают каждую цифру 1, 5, 2, 9, 5, 8, 7 от счета с помощью побитовых операторов (См. ниже примечания редактирования).
Я вполне уверен, это может быть сделано, так как я когда-то использовал похожий метод извлечь красные зеленые и синие значения из шестнадцатеричного значения цвета.
Как я сделал бы это?
Править
Это должны не обязательно быть побитовые операторы, я просто думал, что это будет более просто тот путь.
Вы используете оператор по модулю:
while(score)
{
printf("%d\n", score % 10);
score /= 10;
}
Обратите внимание, что это даст вам цифры в обратном порядке (т.е. сначала наименее значащая цифра). Если вам сначала нужна самая значимая цифра, вам нужно будет сохранить цифры в массиве, а затем прочитать их в обратном порядке.
Значения RGB хорошо ложатся на границы битов; десятичные цифры - нет. Я не думаю, что есть простой способ сделать это с помощью побитовых операторов. Вам нужно будет использовать десятичные операторы, такие как по модулю 10 (% 10).
Не изобретайте велосипед. У C есть sprintf не просто так. Поскольку ваша переменная называется счетом, я предполагаю, что это для игры, в которой вы планируете использовать отдельные цифры счета для отображения числовых глифов в виде изображений. В этом случае sprintf имеет удобные модификаторы формата, которые позволят вам установить счётчик с нуля, пробел и т. Д. До фиксированной ширины, которую вы, возможно, захотите использовать.
Согласен с предыдущими ответами.
Небольшое исправление: есть лучший способ печатать десятичные цифры слева направо без выделения дополнительного буфера. Кроме того, вы можете отобразить нулевой символ, если оценка
равна 0 (цикл, предложенный в предыдущих ответах, ничего не выводит).
Это требует дополнительного прохода:
int div;
for (div = 1; div <= score; div *= 10)
;
do
{
div /= 10;
printf("%d\n", score / div);
score %= div;
} while (score);