从整数中获取每个数字

Joh*_*sen 21 c bitwise-operators

假设我有一个名为'score'的整数,如下所示:

int score = 1529587;
Run Code Online (Sandbox Code Playgroud)

现在我想要做的是使用按位运算符从得分中获取每个数字1,5,2,9,5,8,7(参见下面的编辑说明).

我很确定这可以做到,因为我曾经使用过类似的方法从十六进制颜色值中提取红绿色和蓝色值.

我该怎么做?

编辑
它不一定是按位运算符,我只是觉得它更简单.

Mar*_*n B 41

您使用模运算符:

while(score)
{
    printf("%d\n", score % 10);
    score /= 10;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这将以相反的顺序给出数字(即最低有效数字).如果您首先想要最重要的数字,则必须将数字存储在数组中,然后以相反的顺序读出它们.

  • 来自示例的@Andrey显然OP询问小数位数. (3认同)
  • @Scorpi0:不,它不是......但是使用按位运算符没有明智的方法来做到这一点,我认为这就是 OP 正在寻找的。 (2认同)
  • 不错的方法!这就是我需要的,谢谢:) (2认同)

Dav*_*d M 5

RGB 值很好地落在位边界上;小数位则不然。我认为根本没有一种简单的方法可以使用按位运算符来做到这一点。您需要使用小数运算符,例如模 10 (% 10)。


val*_*ldo 5

同意以前的答案。

稍作修正:有一种更好的方法可以从左到右打印十进制数字,而无需分配额外的缓冲区。另外,如果a score为0 ,则可能要显示零字符(前面的答案中建议的循环不会显示任何内容)。

这需要附加的通行证:

int div;
for (div = 1; div <= score; div *= 10)
    ;

do
{
    div /= 10;
    printf("%d\n", score / div);
    score %= div;
} while (score);
Run Code Online (Sandbox Code Playgroud)