2011-06-16 64 views
26

可能重复:
Is there a printf converter to print in binary format?如何通过printf的打印二进制数

这里是我的程序

#include<stdio.h> 
int main() 
{ 
    int i,a=2; 
    i=~a; 
    printf("a=%d\ni=%d\n",a,i); 

    return 0; 
} 

输出是

a=2 
i=-3 

我想用二进制打印。 %x,%o和%d是十六进制,八进制和十进制数字,但在printf中打印二进制文件是什么?

+6

http://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format – cnicutar 2011-06-16 13:58:50

+2

你真的想要二进制吗?十六进制通常同样好(甚至更好),因为它将每4位映射到一个十六进制数字中,为您提供了二进制数据的紧凑和富有表现力的表示。 – 2011-06-16 14:01:17

+3

@Kerrek @你真的认为看到二进制表示中的数字是无用的吗?尝试分析十六进制数字的浮点数:P – 2011-06-16 14:19:26

回答

40

printf()不直接支持。相反,你必须做出自己的功能。

喜欢的东西:

while (n) { 
    if (n & 1) 
     printf("1"); 
    else 
     printf("0"); 

    n >>= 1; 
} 
printf("\n"); 
+50

这会向后打印二进制表示 – 2012-09-30 19:44:50

+0

@David Heffernan我们如何编写哪些支持plateform 32bit和64bit。 – kapilddit 2012-10-19 06:02:57

+1

@hexa使功能和使用递归来纠正打印顺序。它会有帮助吗? – kapilddit 2012-10-19 06:07:20

36

虽然ANSI C没有这种机制,可以使用itoa()作为一种快捷方式:

char buffer [33]; 
    itoa (i,buffer,2); 
    printf ("binary: %s\n",buffer); 

这里的由来:

itoa in cplusplus reference

这是非标准的C,但是K & R提到C书的实现,所以它应该是相当普遍的。它应该在stdlib.h中。

+1

以防万一/不适合您,请点击此处快速浏览您的网站:http://www.strudel.org.uk/itoa – evandrix 2013-10-18 17:02:01