如何用CC++编写代码实现十进制转二进制的转换功能?

2026-04-11 21:392阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2422个文字,预计阅读时间需要10分钟。

如何用C/C++编写代码实现十进制转二进制的转换功能?

作者:榴莲带你看世界原文为原创文章,版权归属本人所有。文章首次发布于CSDN:https://blog.csdn.net/m0_61643743/article/details/130260640主题:十进制转二进制、整数十进制转二进制转换方法+如何用代码实现十进制转二进制

作者:柒烨带你飞

本文为原创文章,版权归本人所有。

文章首发于CSDN:blog.csdn.net/m0_61643743/article/details/130260640

十进制转二进制

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

一,十进制转二进制方法

方法1:除二取余法

十进制数除2得商取余法:对十进制进行除法运算,十进制除以2可以得到一个商和余数;再用得到的商除以2又得到一个商和余数,以此内推,直达最后一次除以2,商为0或1停止

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

十进制13转二进制:

13/2 = 6.....1

6/2 = 3.....0

3/2 = 1.....1

1/2 = 0.....1



把余数逆序排列,13的二进制数就是:1101。

十进制20转二进制:

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

如何用C/C++编写代码实现十进制转二进制的转换功能?

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; }

本文共计2422个文字,预计阅读时间需要10分钟。

如何用C/C++编写代码实现十进制转二进制的转换功能?

作者:榴莲带你看世界原文为原创文章,版权归属本人所有。文章首次发布于CSDN:https://blog.csdn.net/m0_61643743/article/details/130260640主题:十进制转二进制、整数十进制转二进制转换方法+如何用代码实现十进制转二进制

作者:柒烨带你飞

本文为原创文章,版权归本人所有。

文章首发于CSDN:blog.csdn.net/m0_61643743/article/details/130260640

十进制转二进制

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

一,十进制转二进制方法

方法1:除二取余法

十进制数除2得商取余法:对十进制进行除法运算,十进制除以2可以得到一个商和余数;再用得到的商除以2又得到一个商和余数,以此内推,直达最后一次除以2,商为0或1停止

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

十进制13转二进制:

13/2 = 6.....1

6/2 = 3.....0

3/2 = 1.....1

1/2 = 0.....1



把余数逆序排列,13的二进制数就是:1101。

十进制20转二进制:

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

如何用C/C++编写代码实现十进制转二进制的转换功能?

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; }