C 中二进制的格式说明符是什么? [重复]

问题描述 投票:0回答:3

我查遍了所有地方,但没有找到我的问题的答案。首先,我知道十进制的符号是

%d
,八进制的符号是
%o
,十六进制的符号是
%x
。然而,我找不到的是二进制的符号。我将不胜感激任何帮助。

c binary symbols
3个回答
12
投票

更新: 从 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)); 
    }
}

相应地调整函数以获得更大的整数。但要警惕有符号移位,因为该行为是未定义的并且完全依赖于编译器。


0
投票

没有一个。如果你想以二进制输出,只需编写代码即可。


0
投票

没有直接的方法。一种方法是,您可以创建一个查找表,将字节转换为由 1 和 0 组成的

const char *
。然后您可以迭代字节并打印出查找表中的内容。

© www.soinside.com 2019 - 2024. All rights reserved.