十进制转二进制的方法 + 写代码实现[C/C++]

简介: 整数十进制转二进制转换方法 + 如何用代码实现为主要内容方法1:除二取余法十进制数除2得商取余法:对十进制进行除法运算,十进制除以2可以得到一个商和余数方法2:按权相加法......

作者:柒烨带你飞
本文为原创文章,版权归本人所有。
文章首发于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:按权相加法

规律如下:

二进制 10000000 1000000 100000 10000 1000 100 10 1
十进制 128 64 32 16 8 4 2 1
位权(幂形式) 2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0

根据上面的规律,假设下面8位二进制都是0

128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 1
求129的二进制数:只需把上面表格中128和1下面的0改为1(128+1 =129) 129的二进制数:10000001
128 64 32 16 8 4 2 1
1 0 0 0 0 1 1 1
求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
16 8 4 2 1
1 0 1 0 0
求20的二进制数:(16+4=20) 20的二进制数:10100。16比20小设1,20-16=4,8比4大设0,4等于4设1。
8 4 2 1
1 0 1 0
求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;
​
}
相关文章
|
3月前
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
76 2
|
3月前
|
算法框架/工具 C++ Python
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
根据相机旋转矩阵求解三个轴的旋转角/欧拉角/姿态角 或 旋转矩阵与欧拉角(Euler Angles)之间的相互转换,以及python和C++代码实现
238 0
|
10天前
|
算法 安全 C++
提高C/C++代码的可读性
提高C/C++代码的可读性
28 4
|
1月前
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
228 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
2月前
|
C++
继续更新完善:C++ 结构体代码转MASM32代码
继续更新完善:C++ 结构体代码转MASM32代码
|
2月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
2月前
|
C++
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
2月前
|
前端开发 C++ Windows
C++生成QML代码与QML里面集成QWidget
这篇文章介绍了如何在C++中生成QML代码,以及如何在QML中集成QWidget,包括使用Qt Widgets嵌入到QML界面中的技术示例。
|
3月前
|
程序员 C++ 开发者
C++命名空间揭秘:一招解决全局冲突,让你的代码模块化战斗值飙升!
【8月更文挑战第22天】在C++中,命名空间是解决命名冲突的关键机制,它帮助开发者组织代码并提升可维护性。本文通过一个图形库开发案例,展示了如何利用命名空间避免圆形和矩形类间的命名冲突。通过定义和实现这些类,并在主函数中使用命名空间创建对象及调用方法,我们不仅解决了冲突问题,还提高了代码的模块化程度和组织结构。这为实际项目开发提供了宝贵的参考经验。
63 2
|
3月前
|
C++
拥抱C++面向对象编程,解锁软件开发新境界!从混乱到有序,你的代码也能成为高效能战士!
【8月更文挑战第22天】C++凭借其强大的面向对象编程(OOP)能力,在构建复杂软件系统时不可或缺。OOP通过封装数据和操作这些数据的方法于对象中,提升了代码的模块化、重用性和可扩展性。非OOP方式(过程化编程)下,数据与处理逻辑分离,导致维护困难。而OOP将学生信息及其操作整合到`Student`类中,增强代码的可读性和可维护性。通过示例对比,可以看出OOP使C++代码结构更清晰,特别是在大型项目中,能有效提高开发效率和软件质量。
34 1