C 尝试使用字符掩码将十进制长度转换为二进制,但我无法成功

C 尝试使用字符掩码将十进制长度转换为二进制,但我无法成功,c,binary,decimal,C,Binary,Decimal,是否可以使用字符掩码进行二进制转换?我当前的输出是:011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 预期产出: 00000000000000000000000000000000000000000000 11000011010101这里有一个正确的版本 long number = 12501; unsigned char mask

是否可以使用字符掩码进行二进制转换?我当前的输出是:011010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

预期产出:
00000000000000000000000000000000000000000000 11000011010101这里有一个正确的版本

long number = 12501;
unsigned char mask = 1 << 7;    // create a mask 10000000
for (size_t i=0; i<(sizeof(long)*8); ++i){    // iteration for all bits of long type
    if (mask & number){
        putchar('1');
    } else {
        putchar('0');
    }
    number <<=1;    // I shift the most significant bit after every comparison
}

掩码的用途是什么?要将位与位进行比较,请注意可以对字符进行签名。。。然后,当转换为long时,它将变为0xFFFFFFFFFF80。将其定义为无符号字符maskIt看起来像是复制粘贴代码而不理解它。将long number更改为unsigned long number,并将unsigned char mask更改为unsigned long mask=1UL@chux。很抱歉,实际上,由于我是将数字作为函数参数传递的,所以我总是在线程中获得输出。但是如果我像在线程中写的那样手动将数字设置为12501以简化,我会得到您的输出。。。我不知道为什么..因为1是int,它可以比无符号的long短。
void printbin(long number)
{
    unsigned long mask = 1LU << (sizeof(unsigned long) * CHAR_BIT - 1);    // create a mask 10000000
    for (; mask; mask >>= 1){    // iteration for all bits of long type
            putchar((number & mask) ? '1' : '0');
    }
}