在C语言中,二进制的格式说明符是什么?

6

我已经到处寻找答案,但是没有找到我的问题的答案。首先,我知道十进制的符号是%d,八进制的符号是%o,十六进制的符号是%x。然而,我找不到二进制的符号。希望能得到任何帮助。


请查看此帖子 http://stackoverflow.com/questions/35641213/printing-binary-number-giving-weird-results - machine_1
3个回答

12

你找不到一个用于打印二进制整数的格式说明符的原因是因为并不存在这样的说明符。你需要编写自己的函数来打印二进制数。

因此,对于单个无符号字节:

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

相应地调整函数以处理更大的整数。但要小心有符号移位,因为其行为是未定义的,并完全取决于编译器。


0

没有现成的方法。如果你想以二进制形式输出,只需编写代码即可。


4
更像是一条注释? - machine_1
1
它完全回答了他的问题。如果一个完整的答案应该是一条评论,那么这是一个糟糕的问题。但我没有看到这个问题有什么问题。 - David Schwartz

0

没有直接的方法。一种方法是,您可以创建一个查找表,将一个字节转换为由1和0组成的const char *。然后,您可以遍历字节并打印出查找表中的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接