c语言函数转换成二进制 c语言怎么转换成二进制

C语言转换二进制

unsigned int i, j, sum;,改为int i, j, sum;无符号的没有负数,所有i=0永远成立,死循环啦,同学

成都创新互联公司是一家专注于网站建设、成都网站制作与策划设计,维西网站建设哪家好?成都创新互联公司做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:维西等地区。维西做网站价格咨询:18980820575

在C语言中怎么把一个数转换成二进制然后输出

数据在内存中本来就是以二进制补码存放的,设法从高字节至低字节一个bit一个bit地输出到屏幕上即可。根据题面要求,输出过程还要做以下工作:

从最高字节开始检测,全0的字节略去;

每8位增加输出一个空格。

代码如下:

12345678910111213141516//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"int main(void){ char *p; unsigned i,n,x=1sizeof(int)*8-1; printf("Input an integer...\n"); scanf("%d",n); for(p=(char *)n,i=sizeof(int)-1;i0;i--) if(*(p+i)==0) x=8; else break; for(i=0;x;x=1) printf(++i%8 ? "%d" : "%d ",(nx) || 0); printf("\n"); return 0;}

c语言: 编写递归函数把输入的一个负整数转换成二进制输出

根据评论要求,改进代码:

1、函数getBCode是题目要的递归函数,实现转二进制(最高位是符号位)。

思路是十进制数绝对值除以2求余,得到反向二进制原码,反向创建链表保存结果,最终得到的单向链表就是完整二进制数原码,之后根据正负性,负数取反+1。链表头添加符号位。

2、函数freeBny为释放链表,如要重复调用函数getBCode,每次调用需调用一次freeBny。

3、函数showBny是打印输出,为对齐显示,按4的倍数位打印,高位补齐的位数值均与符号位一致。

#include stdio.h

#include malloc.h

#include math.h

typedef struct binary//成员用char类型保存数值,不是'1'或'0'的ASCII码

{

char b;//一位二进制数0或1

struct binary *next;

}BNY;

BNY *getBCode(int n);//获得二进制数(最高位是符号位)

void showBny(BNY *bnyHead);//对齐打印二进制数(保证是4的倍数)

void freeBny(BNY *bnyHead);//释放二进制数链表空间

int main()

{

int n;

BNY bny,*bnyHead=bny;

while(1)

{

  printf("请输入一个整数:"),scanf("%d",n);

  bnyHead-next=getBCode(n);

  printf("转为二进制数:"),showBny(bnyHead);

  freeBny(bnyHead);

  printf("\n");

}

return 0;

}

void freeBny(BNY *bnyHead)

{

BNY *prev=NULL,*bny=NULL;

bny=bnyHead-next;

while(bny)

{

  if(prev) prev-next=NULL,free(prev),prev=NULL;

  prev=bny;

  bny=bny-next;

}

bnyHead-next=NULL;

}

void showBny(BNY *bnyHead)

{

int i,f=-1,len=0,n=0;

BNY *bnySave=bnyHead;

while(bnyHead-next)

{

  if(f==-1) f=bnyHead-next-b;

  len++;

  bnyHead=bnyHead-next;

}

if(len%4)

  n=4-len%4;

for(i=0;in;i++)printf("%d",f);

bnyHead=bnySave;

while(bnyHead-next)

{

  printf("%d",bnyHead-next-b);

  n++;

  if(n==4)printf(" "),n=0;

  bnyHead=bnyHead-next;

}

}

BNY *getBCode(int n)

{

int s,y;

static BNY*bnyPrev=NULL;

static int cy=0,f=-1;//加1进位用

if(f==-1 n=0)f=1;

if(f==-1 n0)f=0,cy=1;

n=abs(n);

BNY *bnyNew=NULL;

s=n/2,y=n%2;

bnyNew=(BNY *)malloc(sizeof(BNY));

if(!bnyNew) return NULL;

bnyNew-b=y;

// 如是负数,直接取反+1

if(!f) bnyNew-b=!(bnyNew-b);//从最低位开始,负数取反

if(cy)bnyNew-b=bnyNew-b+cy,cy=0;//负数+1

if(bnyNew-b1)bnyNew-b=0,cy=1;

bnyNew-next=NULL;

if(bnyPrev) bnyNew-next=bnyPrev;

bnyPrev=bnyNew;

n=s;

if(n==0)

{

  bnyNew=(BNY *)malloc(sizeof(BNY));//添加符号位

  if(!bnyNew) return NULL;

  if(!f)

      bnyNew-b=1;

  else

      bnyNew-b=0;

  bnyNew-next=bnyPrev;

  bnyPrev=NULL;

  cy=0,f=-1;

  return bnyNew;

}

return getBCode(n);

}

在c语言中如何将其它进制转化为2进制

c语言中没有二进制的格式输出符号.你可以用itoa函数很方便的将一个10进制int转变成二进制字符串.如:inti;chars[128];scanf("%d",i);itoa(i,s,2);/*3个参数,第一个是待转换的数,第二个是存放转换后的字符串,第三个即需要转换的进制*/printf("该数转换为二进制是:[%s]\n",s);补充一点,itoa函数的头文件是stdlib.hjava中二进制数可以用0b来表示,主要的是你要注意0b后面的数字不能有超过1小于0的数。举个列子吧看下面的代码:publicclassJinZhi{publicstaticvoidmain(String[]args){inta10=12;inta8=0b12;System.out.println("十进制12等于"+a10);System.out.println("八进制12等于"+a8);}}该段代码运行时会报错显示0b后面的数字1和2之间没有打“;”,这是因为0b的后面表示的数字是二进制数不能出现超过1的数字。当吧0b后面数字改成11111111(8个1)后,输出了结果255


新闻标题:c语言函数转换成二进制 c语言怎么转换成二进制
分享路径:http://myzitong.com/article/ddggihj.html