我查遍了所有地方,但没有找到我的问题的答案。首先,我知道十进制的符号是
%d
,八进制的符号是%o
,十六进制的符号是%x
。然而,我找不到的是二进制的符号。我将不胜感激任何帮助。
更新: 从 C23 开始,不再需要以下功能。新的格式说明符
%b
和 %B
已添加到 printf() 和朋友中,以将整数格式化为二进制数 - 前者省略任何前导零,后者包括它们(类似于 %x
和 %X
) .
原答案:
您之所以无法找到用于以二进制形式打印整数的格式说明符,是因为没有格式说明符。您必须编写自己的函数来以二进制形式打印数字。
因此对于单个无符号字节:
#include <stdio.h>
#include <limits.h>
void print_bin(unsigned char byte)
{
int i = CHAR_BIT; /* however many bits are in a byte on your platform */
while(i--) {
putchar('0' + ((byte >> i) & 1)); /* loop through and print the bits */
}
}
对于标准无符号整数:
#include <stdio.h>
#include <limits.h>
void print_bin(unsigned int integer)
{
int i = CHAR_BIT * sizeof integer; /* however many bits are in an integer */
while(i--) {
putchar('0' + ((integer >> i) & 1));
}
}
相应地调整函数以获得更大的整数。但要警惕有符号移位,因为该行为是未定义的并且完全依赖于编译器。
没有一个。如果你想以二进制输出,只需编写代码即可。
没有直接的方法。一种方法是,您可以创建一个查找表,将字节转换为由 1 和 0 组成的
const char *
。然后您可以迭代字节并打印出查找表中的内容。