【发布时间】:2016-06-25 21:38:10
【问题描述】:
我找遍了所有地方,但我没有找到我的问题的答案。首先,我知道十进制的符号是%d,八进制的符号是%o,十六进制的符号是%x。但是,我找不到的是二进制的符号。我将不胜感激。
【问题讨论】:
我找遍了所有地方,但我没有找到我的问题的答案。首先,我知道十进制的符号是%d,八进制的符号是%o,十六进制的符号是%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));
}
}
相应地调整函数以获得更大的整数。不过要小心有符号移位,因为这种行为是未定义的并且完全依赖于编译器。
【讨论】:
for(; i > 0; --i) { 错误;对于 32 位整数,它将从 32 开始。我的建议:while i--) {
没有直接的方法。一种方法是,您可以制作一个查找表,将一个字节转换为 1 和 0 的 const char *。然后您可以遍历字节并打印出查找表中的内容。
【讨论】:
没有。如果你想以二进制输出,只需编写代码即可。
【讨论】: