作者:柒烨带你飞
本文为原创文章,版权归自己所有。
文章首发于CSDN:https://blog.csdn.net/m0_61643743/article/details/130260640

十进制转二进制

整数十进制转二进制转换方法 + 如何用代码实现为次要内容

一,十进制转二进制办法

办法1:除二取余法

十进制数除2得商取余法:对十进制进行除法运算,十进制除以2能够失去一个商和余数;再用失去的商除以2又失去一个商和余数以此内推,中转最初一次除以2,商为0或1进行

十进制转换例子:(13)(20)把这2个十进制数转换为二进制

13/2 = 6.....1 ,6/2 = 3.....0, 3/2 = 1.....1 , 1/2 = 0.....1 ; 把余数逆序排列,13的二进制数就是:1101
20/2 = 10.....0 10/2 = 5.....0 5/2 = 2.....1 2/2 = 1.....0 1/2 = 0.....1 20的二进制数就是:10100
十进制转二进制时只需算出整数商即可,如理论 5/2 = 2.5,算出整数商2取余就好,如:5/2 = 2....1


办法2:按权相加法

法则如下:

二进制100000001000000100000100001000100101
十进制1286432168421
位权(幂模式)2^72^62^52^42^32^22^12^0

依据下面的法则,假如上面8位二进制都是0

1286432168421
10000001
求129的二进制数:只需把下面表格中128和1上面的0改为1(128+1 =129) 129的二进制数:10000001
1286432168421
10000111
**求135的二进制数:(128+2+4+1=135)135的二进制数:10000111 128比135小所以128下改1,135-128 = 7。
64,32,16,8比7大所以都设为0,4比7小设1,7-4=3;2比3小设1, 最初残余的1,1等于1设1**
168421
10100
求20的二进制数:(16+4=20) 20的二进制数:10100。16比20小设1,20-16=4,8比4大设0,4等于4设1。
8421
1010
求10的二进制数:(8+2=10) 10的二进制数:1010。8比10小设1,10-8=2,4比2大设0,2等于2设1

借助这个办法十进制转二进制更容易,纯熟了之后笔算,心算一下就能算出二进制数,不必像除2取余法一样繁冗

二,代码实现

实例:

步骤实现:

获取用户输出的十进制数。
判断用户输出的数据是否不符合要求,合乎则进入下一阶段,不合乎则从新输出或退出。
十进制转二进制运算实现区
输入失去的二进制数
1,C 代码实现
#include<stdio.h>int main(){    short BinaryNumbe[32]={0};//定义一个数组存储二进制数    int i,n;//i为数组下标,n用来存储十进制数     /*步骤1:    获取用户输出的十进制数。    判断用户输出的数据是否符合要求,合乎则进入下一阶段,不合乎则从新输出*/    do    {    printf("请输出要转换的十进制数(1-2147483647):");//提醒输出十进制    scanf("%d",&n);//scanf获取输出的数据        if (n <= 0 || n > 2147483647)/*用if判断数据是否输出有误,有误则从新输出*/        {            printf("输出有误,十进制转二进制范畴为(1-2147483647)\n");            continue;            /*提醒输出有误,用continue完结本次循环,再进行一次循环*/        }    } while (0);        /*步骤2:    十进制转二进制计算实现区。    用for循环,i为数组下标,计算十进制除2去余赋值给寄存二进制数据的数组*/    for ( i = 0; i < 32  ; i++)//int最大值为(2147483647)32位二进制数最大也是2147483647。所以循环次数设置为32(0-31)    {          BinaryNumbe[i] = n % 2;//取余赋值给数组              n = n / 2; //除以2,失去下一个商,赋值给n        if (n == 0)        {            break;//当商等于0时,不再进行多余次数的循环,break跳出循环;        }    }        /*步骤3:    输入二进制数据。    下面i++曾经记录了循环计算的次数。    i循环的次数 == i位二进制数 == 数组[i]最初赋值的余数 。    间接在上面for循环中加个i >= 0 ; i--,就能逆序输入了。    */   printf("二进制数是:");    for (n = 1 ; i >= 0 ; i--)    {        printf("%d",BinaryNumbe[i]);//逆序打印二进制数                if (n%4 == 0 )        {//为了好看,用if判断每输入4个二进制数,打印一个空格。         //该段用n来记录了输入次数,该段代码可不加            printf(" ");        }         n++;            }     printf("\n");//换行    system("pause");    return 0;}

把上述代码简化改成一个函数,思路不变

void Binary(int n){    short Binary[32] ={0};//定义一个数组寄存二进制0 1    int i = 0;//数组下标    for ( ; i < 32; i++)    {        Binary[i] = n%2;        n = n/2;        if (n == 0)        {            break;        }    }    printf("二进制数是:");    for ( ; i >= 0; i--)    {        printf("%d",Binary[i]);    }    printf("\n");}

利用该函数代码如下

#include<stdio.h>void Binary(int n);//=========================主函数main==========================//int main(){  int n;  printf("请输出十进制数:");  scanf("%d",&n);  Binary(n);  system("pause");  return 0;}//==========================函数功能区=========================//void Binary(int n){    short Binary[32] ={0};//定义一个数组寄存二进制0 1    int i;//数组下标    for ( i = 0; i < 32; i++)    {        Binary[i] = n%2;        n = n/2;        if (n == 0)        {            break;        }    }    printf("二进制数是:");    for ( ; i >= 0; i--)    {        printf("%d",Binary[i]);    }    printf("\n");}

再次简化用另一种思路批改(递归思路),这种代码量更小更快捷,十进制转二进制函数实现

void Binary(int n){//int n为十进制数    short t = 0;//定义t存储二进制    if(n != 0){        t = n % 2;        n = n / 2;        /*重点        调用函数自身,一层层调用函数自身往下运算。        直到n==0时不再调用函数自身,从里到外一层层的打印获得的余数*/        Binary(n);                printf("%d",t);    }}

残缺代码如下

#include<stdio.h>void Binary(int n);//=========================主函数main==========================//int main(){    int n;    printf("请输出十进制数:");    scanf("%d",&n);    Binary(n);        system("pause");    return 0;}//==========================函数功能区=========================//void Binary(int n){    short t = 0;    if(n != 0){        t = n % 2;        n = n / 2;        Binary(n);        printf("%d",t);    }}
2,C++代码实现
#include <iostream>     using namespace std;int main()              {    short BinaryNumbe[32]={0};//定义一个数组存储二进制数    int i,n;//i为数组下标,n用来存储十进制数    do    {    cout << "请输出十进制数:" ;    cin >> n;//cin获取用户输出的十进制数    if (n <= 0  || n>2147483647)//if判断输出的数据是否有误    {        cout << "输出有误,本程序十进制转二进制范畴为(1-2147483647):"<< endl;        continue;//continue完结本次循环,再进行一次循环    }    } while (0);         for ( i = 0; i<32; i++)    {        BinaryNumbe[i] = n % 2;//取余赋值给数组        n = n / 2;//除以2,失去下一个商,赋值给n        if (n == 0)////当商等于0时,不再进行多余次数的循环,break跳出循环;        {            break;        }    }        /* 下面i++曾经记录了循环计算的次数。    i循环的次数 == i位二进制数 == 数组[i]最初赋值的余数 。    间接在上面for循环中加个i >= 0 ; i--,就能逆序输入了。*/    cout << "二进制数是:";    for (; i >= 0; i--)    {        cout <<  BinaryNumbe[i] ;//逆序打印二进制数    }    cout << endl;//换行        system("pause");              return 0;}