我有一个数字,我想用 C 语言将其转换为二进制(从十进制)。
我希望我的二进制始终为 5 位(十进制永远不会超过 31)。我已经有一个函数可以通过除法手动完成,但是很难将其填充到 5 位。
有没有更简单的方法?也许使用位移位?
我还希望用 char *
最佳答案
这是一个优雅的解决方案:
void getBin(int num, char *str)
{
*(str+5) = '\0';
int mask = 0x10 << 1;
while(mask >>= 1)
*str++ = !!(mask & num) + '0';
}
在这里,我们首先确保字符串以空字符结尾。然后,我们创建一个包含单个掩码的掩码(它是您所期望的掩码,向左移动一次以说明 while 条件的第一次运行中的移动)。每次循环,掩码都向右移动一位,然后将相应的字符设置为“1”或“0”(!!
确保我们添加0 或 1 到 '0'
)。最后,当掩码中的 1 移出数字时,while 循环结束。
要测试它,请使用以下内容:
int main()
{
char str[6];
getBin(10, str);
printf("%s\n", str);
return 0;
}
关于c - 十进制转二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7911651/