C语言十进制转二进制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言十进制转二进制相关的知识,希望对你有一定的参考价值。

为什么输出是反的呢?

#include<stdio.h>
void main()

int a=0,b=0;
printf("\n 请输入一个数: \n");
scanf("%d",&a);
do


b=a%2;
printf("%d",b);
a=a/2;

while(a>0);


比如我输入2
它输出为01,反了一下
如何在转过来?
用数组我不只到给它要多大的空间,我不可能分配100000个空间吧
高手请指导一下..........................

呵呵这样做的确输出的是反过来的数
方法一:
可以利用数组顺序存储转换过程中依次得到每个数字位,
转换结束后再按相反的次序输出数组内容即可得到正确的结果。

方法二:
直接搞掂,这才叫强!!!
且看我如何强法!!

#include <stdio.h>
void trans(int x)

int a[30];//我算过了,1亿好像才29位的二进制,一般不用算
//这么大的数了吧~~
int i=0,rem;
do
rem=x%2;x=x/2;
a[i]=rem;
i++;
while(x!=0);//这个算法看你的代码知道你懂!:)
while(i>0)
printf("%d",a[--i]);
printf("\n");//这就是我的精华了,倒输出正确顺序的数~

void main()

int d;
printf("请输入一个十进制的正整数:\n");
do scanf("%d",&d);while(d<0);
trans(d);


我觉得楼主的水平也不差,
应该看得懂吧
我只是加了几句而已
加分哦:)
参考技术A

十进制转二进制可以使用库函数itoa。

itoa函数原型:char*itoa(int value,char*string,int radix);

功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。

nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。


扩展资料:

方法

#include<stdio.h>

int main(void)

int i=0,n,a[32];

printf("请输入一个十进制整数.\\n");

scanf("%d",&n);

while (n>0)

 a[i]=n%2;

 i=i+1;

n=n/2; 

printf("十进制整数转换为二进制数是:\\n");

for(i--;i>=0;i--)

printf("%d",a[i]);

printf("\\n");

return 0;

十进制整数转换为二进制整数的方法:

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

参考技术B 把十进制变成二进制是反复取余除2的,这种方法没错,但是应该逆序读出0或1的序列,才是正确的。
语法正确,逻辑错误。不信在纸上算一下就能看出来了。
参考技术C #include<stdio.h>
void to_binary(unsigned long n);

int main(void)

unsigned long number;
printf("enter an integer :(q to quit)\n");
while(scanf("%ul",&number) == 1)

printf("binary equivalent :");
to_binary(number);
putchar('\n');
printf("enter an integer :(q to quit)\n");


printf("Done \n");
return 0;


void to_binary(unsigned long n)

int r;
r = n % 2;
if(n >= 2)
to_binary(n / 2);
putchar('0' + r);

return;

此为标准程序
#include<stdio.h>
#include<string.h>
int main(void)

int i = 0,m;
unsigned long n;
char a[64];
printf("please enter an integer(q to quit):\n");
while((scanf("%ul",&n)) == 1)

while(n >= 2)

a[i++] = (n % 2) + '0';
n /= 2;

a[i++] = '1';
a[i++] = '\0';
m = strlen(a);
for(i=m-1; i>=0; i--)
printf("%c",a[i]);
printf("\n");
printf("please enter an integer(q to quit):\n");

printf("Bye!\n");
return 0;

此为我自己做的,可以节省内存。
参考技术D 使用库函数itoa。
itoa函数原型:char
*itoa(int
value,char*string,int
radix);
功能:将任意类型的数字转换为字符串。
其中int
value
被转换的整数,char
*string
转换后储存的字符数组,int
radix
转换进制数,如2,8,10,16
进制等。
参考代码:
#include <stdio.h>
#include<stdlib.h>
int main()

int n;
char a[100];
scanf("%d",&n);
itoa(n,a,2);//把十进制n转成2进制
printf("%s\n",a);
return 0;

/*
运行结果:把十进制的15转成2进制
15
1111
*/

用C语言如何把十进制转换为十六进制,要求程序中运用函数

**
程序功能:求二进制,十进制,八进制
创建人:蒲宇林
创建日期:2007年8月13日
**/
#include

void
two();
void
eight();
void
sixteen();
/**主函数**/
void
main()

int
select;
do

printf("0
-
退出,1
-
十进制转二进制,2
-
十进制转八进制,3
-
十进制转十六进制");
scanf("%d",&select);
switch(select)

case
1
:
two();
break;
//十进制转二进制
case
2
:
eight();
break;
//十进制转八进制
case
3
:
sixteen();
break;
//十进制转十六进制
default
:
printf("您的输入有误,请重新输入!");
break;

if(select
==
0)

break;

while(1);

void
two()

int
num,
i;
int
arr[20];
printf("\n请输入一个十进制数:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//转换为二进制并存入数组

arr[i]
=
num
%
2;
num
=
num
/
2;
if(num
==
0)

break;


printf("转换为二进制:");
//打印
for(;
i
>=
0
;
i--
)

printf("%d",arr[i]);

printf("\n");

void
eight()

int
num,
i;
int
arr[20];
printf("\n请输入一个十进制数:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//转换为八进制并存入数组

arr[i]
=
num
%
8;
num
=
num
/
8;
if(num
==
0)

break;


printf("转换为八进制:");
//打印
for(;
i
>=
0
;
i--
)

printf("%d",arr[i]);

printf("\n");

void
sixteen()

int
num,
i;
int
arr[20];
printf("\n请输入一个十进制数:");
scanf("%d",&num);
for(
i
=
0
;
1
;
i++)
//转换为二进制并存入数组

arr[i]
=
num
%
16;
num
=
num
/
16;
if(num
==
0)

break;


printf("转换为十六进制:");
//打印
for(;
i
>=
0
;
i--
)

switch(arr[i])

case
10
:
printf("a");
break;
case
11
:
printf("b");
break;
case
12
:
printf("c");
break;
case
13
:
printf("d");
break;
case
14
:
printf("e");
break;
case
15
:
printf("f");
break;
default
:
printf("%d",arr[i]);


printf("\n");
参考技术A main()

void
change(int
s);
int
num;
printf("请输入这个数:");
scanf("%d",&num);
printf("该数的十六进制形式为:0x%x\n",num);
//直接以十六进制的形式将整数输出
change(num);

void
change(int
s)

char
num1[10];
sprintf(num1,"%x",s);
//sprintf()函数是将变量按指定的格式保存至字符串中。
printf("该数的十六进制形式为:0x%s\n",num1);

说明:
%d
以十进制形式输出整数
%o
以八进制形式输出整数
%x
以16进制形式输出整数
参考技术B 说明:
1.首先变量的值和进制无关
int
a=10;

int
a=0X0A;都是一回事。
2.如果要将一个值用十六进制输出
int
a
=
10;
printf("%X",a);
输出
A
当然了,建议用
printf("0X%X",a);
输出
0XA
附:
%d
以十进制形式输出整数
%o
以八进制形式输出整数
%x
以16进制形式输出整数(0-9
a-f)即:字母小写
%X
以16进制形式输出整数(0-9
A-F)即:字母大写
还是给个可以运行的代码,说明一下问题:
#include

#include

char*
DecToHex(int
iDecVal,char*
szHex)

//将十进制整数格式化为16进制,结果保存在字符串中
sprintf(szHex,"%X",iDecVal);
return
szHex;

void
main()

int
iDecVal;
char
szHex[100];
iDecVal
=
100;
DecToHex(iDecVal,szHex);
printf("Decimal:%d,Hex:%s\n",iDecVal,szHex);

以上是关于C语言十进制转二进制的主要内容,如果未能解决你的问题,请参考以下文章

C语言十进制转二进制

用C语言如何把十进制转换为十六进制,要求程序中运用函数

求十进制转换二进制C语言代码

c语言16进制转换为10进制数的函数是啥?

十进制转化二进制,c语言用调用函数

关于c语音,二进制问题?