二进制转十进制公式?

二进制转十进制公式?,第1张

二进制转换成十进制的方法如下所示:

二进制转十进制通用公式为: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进行记数。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11680787.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存