不使用printf,将十进制数以二进制和十六进制的形式输出
问题
如果不能使用printf系列库函数,我们可以通过位运算得到这个十进制数的二进制和十六进制形式的字符串,再将字符串打印。
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//得到二进制形式的字符串
char *get2String(long num)
{
int i=0;
char* buffer;
char* temp;
buffer = (char*)malloc(33);
temp=buffer;//temp
for(i =0;i<32;i++)
{
temp[i] =num&(1<<(31-i));
temp[i] =temp[i]>>(31-i);
temp[i] =(temp[i]==0)?'0':'1';
}
buffer[32]='\0';
return buffer;
}
char *get16String(long num)
{
int i =0;
char *buffer=(char*)moalloc(11);
char *temp;
buffer[0]='0';
buffer[1]='x';
buffer[10]='\0';
temp = buffer+2;
for(i =0;i<8;i++)
{
temp[i]=(char)(num<<4 * i>>28);
temp[i]=temp[i]>=0?temp[i]:temp[i]+16;
temp[i]=temp[i]<10?temp[i]+48:temp[i]+55;
}
return buffer;
}
int main()
{
char *p = NULL;
char *q = NULL:
int num =0;
scanf("%d",&num);
p = get16String(num);
q = get2String(num);
printf("%s\n",p);
printf("%s\n",q);
return 0;
}