最好使用数组char
来记录原始数据。但要回答你的问题:
#include <limits.h>
#include <stdio.h>
void print_binary(int value)
{
unsigned mask = ~(~0u >> 1); // set highest bit
// iterate over all bits:
for (size_t i = 0; i < sizeof(value) * CHAR_BIT; ++i) {
putchar('0' + !!(value & mask)); // !! converts to bool 0 or 1
mask >>= 1; // shift to next lower bit
}
}
int main(void)
{
int x = 9;
print_binary(x);
putchar('\n');
}
输出:
00000000000000000000000000001001
更短:
#include <stdio.h>
void print_binary(int value)
{
for (unsigned mask = ~(~0u >> 1); mask; mask >>= 1)
putchar('0' + !!(value & mask));
}
PS:只是为了澄清~(~0u >> 1)
(为简单起见,8位):
~0u
否定所有位 向右 1111 1111
~0u >> 1
移动 1 位并用 0 填充 0111 1111
~(~0u >> 1)
1000 0000