二进制转换成十进制的方法如下所示:
二进制转十进制通用公式为:abcdefg(2)=d20+c21+b22+a23+e2-1+f2-2+g2-3(10)
解释:要从右到左用二进制的每个数去乘以2的相应次方,小数点后则是从左往右。
例如:二进制数110101转化成十进制
110101(2)=120+021+122+123 +02-1+12-2=1+0+4+8+0+025=1325(10)
规律:个位上的数字的次数是0,十位上的数字的次数是1,,依次递增,而十
分位的数字的次数是-1,百分位上数字的次数是-2,,依次递减。
注意:不是任何一个十进制小数都能转换成有限位的二进制数。
扩展资料:
二进制的特点
1、它由两个数码0,1组成,二进制数运算规律是逢二进一。
2、二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。
二进制的优点
1、二进制数中只有两个数码0和1,可用具有两个不同稳定状态的元器件来表示一位数码。例如,电路中某一通路的电流的有无,某一节点电压的高低,晶体管的导通和截止等。
2、二进制数运算简单,大大简化了计算中运算部件的结构。
#include<stdioh>
#include<stringh>
#define
MAX
8
//可根据自己要输入2进制长度自动变动
int
main()
{
char
s[MAX],
i,
p
=
1,
x
=
0;
gets(s);
for(i
=
strlen(s);
i
>
0
;
i--)
{
x
=
x
+
(s[i-1]-'0')p;
p=2;
}
printf("转换为十进制为:%d\n",x);
return
0;
}
#include<stdioh>
int Sum(int a[]);
int power(int b);
int main()
{
int array[8],i;
printf("输入一个8位二进制数:");
for(i=0;i<8;i++)
{
scanf("%1d",&array[i]);
}
printf("转换为十进制数后是:%d\n",Sum(array));
return 0;
}
int Sum(int a[])
{
int n,i,sum=0,term;//n为指数,term为每一项的值,如1(22),sum为总和
for(i=0,n=7;i<8;i++,n--)
if(n>=0)
{term=a[i]power(n);
sum=sum+term;
}
return sum;
}
int power(int b)
{
int i=2,j=1;
if(b==0)
i=1;
for(;j<b;j++)
i=2i;
return i;
}
//
//不使用求余和除法的二进制转bcd的算法
//使用了C51中 指令DA的思路
//本人原创 已测试 以应用实际项目中
//Lhex_to_bcd
//
//
// 数据自加 并作10进制检查
//
//
void C51_DA(unsigned char da1,unsigned char Ln,unsigned char ac0)
{
unsigned char i;
unsigned char ac = ac0;//进位标志
for(i=0;i<Ln;i++)
{
da1[i] = da1[i] + da1[i] + ac;
if(da1[i] > 9)
{
da1[i] = da1[i] - 10;
ac = 1;
}
else
{
ac= 0;
}
}
}
//
// 多字节整形转 bcd
// 结果保存为非压缩bcd码
// 输入数据
// da1 用来保存转换结果
// 长度大于 (l+1)2
// da2 被转换数据
// l da2 长度 用字节个数表示
// 输出 无
//
void Lhex_to_bcd(unsigned char da1,unsigned char da2,unsigned char l)
{
unsigned char i;
unsigned char m;
unsigned char tmp;
unsigned char Ln = (l+1)2; //计算结果的长度
for(i=0;i<Ln;i++) //初始化计算结果
da1[i] = 0;
for(m=0;m<l;m++) //循环输入数据的字节数
{
tmp = da2[l-1-m];
for(i=0;i<8;i++)//每个字节循环8次
{
if(tmp&0x80) //取最高 1 bit
C51_DA(da1,Ln,1);
else
C51_DA(da1,Ln,0);
tmp<<=1;
}
}
}
题目要求二进制数不超过32位,显然应该用字符串读入和存储,而不是用int整型存储,因为int型最多只能表示9位十进制数。但32位二进制对应的数值仍然在unsigned int型范围内,所以转换后的结果仍然可以用unsigned int型存储。
#include<stdioh>#include<stringh>
int main()
{
int i,j,n;
unsigned int dec;
char bin_str[33];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",bin_str);
dec=0;
for(j=0;j<strlen(bin_str);j++)
{
dec<<=1;
dec|=bin_str[j]-'0';
}
printf("%u\n",dec);
}
return 0;
}
先把二进制读成字符串, 或者逐个读入字符
然后, 将字符串转为整型。
int bin_to_dec(char s){
int r = 0;
while(s)
{
r<<1;
if(s=='1')
r|=1;
}
return r;
}
int main()
{
char s[40];
gets(s);
printf("%d\n", bin_to_dec(s));
return 0;
}
二进制转十进制公式为:
abcdefg(2)=d20+c21+b22+a23+e2-1+f2-2+g2-3(10)
要从右到左用二进制的每个数去乘以2的相应次方,小数点后则是从左往右
例如:二进制数110101转化成十进制
110101(2)=120+021+122+123 +02-1+12-2=1+0+4+8+0+025=1325(10)
扩展资料:
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制---X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位。
进位制/位置计数法是一种记数方式,故亦称进位记数法/位值计数法,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)