如何计算C中不使用/10的数字的位数?

如何计算C中不使用/10的数字的位数?,c,C,我需要计算二进制编码十进制中的位数,例如00111001。我不能使用典型的/10,因为它在最后2个0被卡住了,并且不计算它们 #include <stdio.h> #include <stdlib.h> void main(void) { int bcd, digits; printf("Input BCD number: "); scanf_s("%d", &bcd); for (digits = 0; (bcd / 10) !=

我需要计算二进制编码十进制中的位数,例如00111001。我不能使用典型的/10,因为它在最后2个0被卡住了,并且不计算它们

#include <stdio.h>
#include <stdlib.h>
void main(void) {
    int bcd, digits;
    printf("Input BCD number: ");
    scanf_s("%d", &bcd);
    for (digits = 0; (bcd / 10) != 0; digits++)
        bcd /= 10;
    printf("Number of digits is %d", digits+1);
    getchar;
}
#包括
#包括
真空总管(真空){
int bcd,数字;
printf(“输入BCD编号:”);
扫描单位(“%d”和bcd);
用于(数字=0;(bcd/10)!=0;数字++)
bcd/=10;
printf(“位数为%d”,位数+1);
getchar;
}
所以,如果我输入1111,它会显示“4”,这是正确的,但当我输入0011时,它会显示“2”,那么我该如何解决这个问题呢

当我键入0011时,它会显示“2”,那么我该如何修复它

使用
“%n”
记录扫描的偏移量

int n1;
int n2;
if (scanf_s(" %n%d%n", &bcd, &n1, &n2) == 1) {
  printf("Input %d\nNumber of digits is %d\n", bcd, n2 - n1);
}

如果您实际使用的是二进制编码的十进制,那么这将起作用:

unsigned short count_bcd_digits(unsigned bcd)
{
    unsigned short count = 0;

    do {
        count++;
    } while(bcd >>= 4);

    return count;
}

请出示你的密码。描述不清楚,我们需要查看您的代码,以便能够帮助指出您的尝试可能存在的问题(我们不只是为您编写)。您的问题非常不清楚。每个二进制编码的十进制数字是4位。所以位数是位数除以4。这就是你的意思吗?@kaylum编辑。“0011”是一个字符串,不是一个数字。请注意,二进制编码十进制(BCD)是一种特殊(且相对不常见)格式,每组4位用于存储十进制数字(例如0000b到1001b=0到9),而某些值无效(1010b到1111b)。你不太可能在用BCD做任何事情(很可能你在问题中使用了“二进制编码的十进制”这个词,让人感到困惑)。