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