n
为输入的二进制数,d用来处理该数。
k为标志位,当k为1时表示输入的数有问题,需要重新输入。
i为每次分解的个位数;j为二进制的权值;m为累计的十进制和;p为输入的数的位数,超过10时,该数越界,需要重新输入,定k=1。
程序如下:
#include
<conio.h>
main()
{
long
int
n,d
int
k,i,j,m,p
do
{
k=0
m=0j=1i=0p=0
printf("\ninput
an
number
only
includes
0
or
1:")
scanf("%ld",&n)
if(n<0)
k=1
d=n
while(d)
{
i=d%10p++
if(i>1
||
p>10)
{k=1break}
m+=i*j
j=j*2
d/=10
}
}
while(k==1
||
m==0)
printf("\n
the
number
is
%d\n",m)
getch()
}
/**程序功能:求二进制,十进制,八进制
创建人:蒲宇林
创建日期:2007年8月13日
**/
#include
<stdio.h>
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")
}
#include<stdio.h>main()
{
int c1,c2
c1=300
c2=400
printf("%c %c\n",c1,c2)//因为字符只有8位 这里 c1,c2 会强制转换成char型
// 便只有低八位会显示
// c1%256= 44=0x2c 即是ASCII ','
// c2%256= 144超过ASCII 127的范围,即无相应字符,一律为 '?'
}