unsigned int i, j, sum;,改为int i, j, sum;无符号的没有负数,所有i=0永远成立,死循环啦,同学
成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的岳麓网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
十六进制转成十进制的函数:
//返回16进制字符串s对应的整数值,遇到任何一个非法字符都返回-1。
int
HexToDec(char
*s)
{
char
*p
=
s;
//空串返回0。
if(*p
==
'\0')
return
0;
//忽略开头的'0'字符
while(*p
==
'0')
p++;
int
dec
=
0;
char
c;
//循环直到字符串结束。
while(c
=
*p++)
{
//dec乘16
dec
=
4;
//数字字符。
if(c
=
'0'
c
=
'9')
{
dec
+=
c
-
'0';
continue;
}
//小写abcdef。
if(c
=
'a'
c
=
'f')
{
dec
+=
c
-
'a'
+
10;
continue;
}
//大写ABCDEF。
if(c
=
'A'
c
=
'F')
{
dec
+=
c
-
'A'
+
10;
continue;
}
//没有从任何一个if语句中结束,说明遇到了非法字符。
return
-1;
}
//正常结束循环,返回10进制整数值。
return
dec;
}
十进制转成二进制的函数:
/*递归法求二进制数*/
#include
void
printb(int
x,int
n);
void
main()
{
int
x;
printf("input
number:");
scanf("%d",x);
printf("number
of
decimal
form:
%d\n",x);
printb(x,sizeof(int)*8);
putchar('\n');
}
void
printb(int
x,int
n)
{
if(n0)
{
putchar('0'+(
(unsigned)(x
(1(n-1)
)
)(n-1)));
printb(x,n-1);
}
}
/*
输入整数(0结束) : 10
10 = (1010)2
输入整数(0结束) : 127
127 = (1111111)2
输入整数(0结束) : 255
255 = (11111111)2
输入整数(0结束) :
*/
#include stdio.h
#include stdlib.h
char *Converse(char s[],int n) {
int i,ch,m = 0;
while(n) {
s[m] = n%2 + '0';
n /= 2;
++m;
}
s[m] = '\0';
for(i = 0; i m/2; ++i) {
ch = s[i];
s[i] = s[m - 1 - i];
s[m - 1 - i] = ch;
}
return s;
}
int main() {
int num;
char s[20];
while(1) {
printf("输入整数(0结束) : ");
scanf("%d",num);
if(num == 0) break;
if(num 0) num = -num;
printf("%d = (%s)2\n",num,Converse(s,num));
}
system("PAUSE");
return 0 ;
}
#include "stdio.h"
int main()
{
int n;
int i=0,j;
char str[100]={0};
char output[100]={0};
printf("请输入一个整数:");
scanf("%d",n);
while(n)
{
str[i]=n%2+'0';
n=n/2;
i++;
}
for(j=0;ji;j++)
output[j]=str[i-1-j];
printf("该整数的二进制表示为:%s\n",output);
}
十进制转二进制可以使用库函数itoa。
itoa函数原型:char*itoa(int value,char*string,int radix);
功能:将任意类型的数字转换为字符串。在stdlib.h中与之有相反功能的函数是atoi。
nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。
扩展资料:
方法
#includestdio.h
int main(void)
{ int i=0,n,a[32];
printf("请输入一个十进制整数.\n");
scanf("%d",n);
while (n0)
{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去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
#include stdio.h
void main()
{
//进制转换函数的声明
int transfer(int x);
int x;
printf("请输入一个十进制数:");
scanf("%d",x);
printf("转换成二进制数是:%d\n",transfer(x));
}
int transfer(int x)
{
int p=1,y=0,yushu;
while(1)
{
yushu=x%2;
x/=2;
y+=yushu*p;
p*=10;
if(x2)
{
y+=x*p;
break;
}
}
return y;
}
扩展资料:
(1)二进制转十进制
方法:“按权展开求和”
【例】:
规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。
注意:不是任何一个十进制小数都能转换成有限位的二进制数。
(2)十进制转二进制
十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法)
【例】:
89÷2 ……1
44÷2 ……0
22÷2 ……0
11÷2 ……1
5÷2 ……1
2÷2 ……0
1
十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)
参考资料:
百度百科-二进制