可能重复:
是否有printf转换器以二进制格式打印?
这是我的计划
#include<stdio.h>
int main ()
{
int i,a=2;
i=~a;
printf("a=%d\ni=%d\n",a,i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
a=2
i=-3
Run Code Online (Sandbox Code Playgroud)
我希望这个以二进制打印.%x,%o和%d是十六进制,八进制和十进制数,但是什么用于在printf中打印二进制文件?
我正在寻找一个允许我打印int的二进制表示的函数.到目前为止我所拥有的是什么;
char *int2bin(int a)
{
char *str,*tmp;
int cnt = 31;
str = (char *) malloc(33); /*32 + 1 , because its a 32 bit bin number*/
tmp = str;
while ( cnt > -1 ){
str[cnt]= '0';
cnt --;
}
cnt = 31;
while (a > 0){
if (a%2==1){
str[cnt] = '1';
}
cnt--;
a = a/2 ;
}
return tmp;
}
Run Code Online (Sandbox Code Playgroud)
但是当我打电话时
printf("a %s",int2bin(aMask)) // aMask = 0xFF000000
Run Code Online (Sandbox Code Playgroud)
我输出像;
0000000000000000000000000000000000xtpYy(还有一堆未知字符.
这是函数中的缺陷还是我打印字符数组的地址或什么?对不起,我只是看不出我出错的地方.
NB代码来自这里
编辑:这不是家庭作业FYI,我正在尝试用不熟悉的语言调试别人的图像处理程序.然而,如果它被标记为家庭作业,因为它是一个基本概念,然后公平竞争.
我试图在C中编写一个打印int的程序.由于某种原因我得到错误的价值观,
void printBits(unsigned int num){
unsigned int size = sizeof(unsigned int);
unsigned int maxPow = 1<<(size*8-1);
printf("MAX POW : %u\n",maxPow);
int i=0,j;
for(;i<size;++i){
for(j=0;j<8;++j){
// print last bit and shift left.
printf("%u ",num&maxPow);
num = num<<1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题,首先是为什么我得到这个结果(对于printBits(3)).
最大电平:2147483648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 2147483648 214748364 8
第二是有更好的方法吗?