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

Trying to convert decimal long to binary using a char mask, but I can't succeed

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
}

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

预期输出: 0000000000000000000000000000000000000000000000000011000011010101

这里你有一个正确的版本

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');
    }
}

https://godbolt.org/z/Qm8Uqs