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)
请注意,这将以相反的顺序给出数字(即最低有效数字).如果您首先想要最重要的数字,则必须将数字存储在数组中,然后以相反的顺序读出它们.
同意以前的答案。
稍作修正:有一种更好的方法可以从左到右打印十进制数字,而无需分配额外的缓冲区。另外,如果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)