精华内容
下载资源
问答
  • C语言算法之将十进制数转换成二进制

    万次阅读 多人点赞 2018-06-20 14:35:29
    导语:在C语言中没有将...下面给大家讲述一下如何编程实现将十进制数转换成二进制数。 先将源代码展示给大家: #include <stdio.h> void main() { //进制转换函数的声明 int transfer(int x)...

    导语:在C语言中没有将其他进制的数直接输出为二进制数的工具或方法,输出为八进制数可以用%o,输出为十六进制可以用%x,输出为二进制就要我们自行解决了。下面给大家讲述一下如何编程实现将十进制数转换成二进制数。

    原文的实现方式太年轻了,是我大一的时候写的。由于太多小伙伴被『溢出』困扰(在溢出的情况下原文的实现就不灵了),补充下面这种最佳的实现方式。

    最佳的方式是利用栈先进后出的特性,计算每一位(0或1)压入栈中,再将所有元素出栈得到的01串就是目标二进制数。以下为C++实现代码,想用C语言实现的可以进行相应的改造,用数组实现一个栈,用字符数组实现字符串。

    #include <iostream>
    #include <stack>
    
    using namespace std;
    
    string transfer(int x) {
        if (x == 0) {
            return "0";
        }
        string ret;
        stack<char> st;
        while (x > 0) {
            if (x % 2 == 1) {
                st.push('1');
            } else {
                st.push('0');
            }
            x /= 2;
        }
        while (!st.empty()) {
            ret.push_back(st.top());
            st.pop();
        }
        return ret;
    }
    
    int main() {
        int x;
        cin >> x;
        cout << transfer(x) << endl;
        return 0;
    }

    下面是大一时候的实现,没有考虑溢出的问题,对于不懂栈的同学可以看一下。

    先将源代码展示给大家:

    #include <stdio.h>
    void main()
    {
        //进制转换函数的声明
        int transfer(int x);
        int x;
        printf("请输入一个十进制数:");
        scanf("%d",&x);
        printf("转换成二进制数是:%d\n",transfer(x));
    }
    int transfer(int x)
    {
        int p=1,y=0,yushu;
        while(1)
        {
            yushu=x%2;
            x/=2;
            y+=yushu*p;
            p*=10;
            if(x<2)
            {
                y+=x*p;
                break;
            }
        }
        return y;
    }

    具体算法体现在函数体内,使用了一个while(1)的死循环,当结果产生后跳出循环。变量yushu是每一次循环内产生的余数,变量x每次循环都会被赋予新的值,这个新的值就是每一次循环内产生的商。当产生的商小于2时即产生了最后的结果(二进制数),然后跳出循环。

    例如:函数自变量若为7,用自变量7除以2,得到第一次循环产生的余数为1,第一次循环产生的商为3;用第一次循环产生的商3除以2,得到第二次循环产生的余数为1,第二次循环产生的商为1。

    变量y的存放也是有一定技巧的,由于每次产生的余数都小于2并且都是最后二进制数中需要按位展现出来的,因此每一次循环产生的余数都要合理地进行存放。第一次产生的余数放在个位,第二次产生的余数放在十位,第三次产生的余数放在百位......依次类推,直至某一次循环产生的商小于2,最后再把小于2的那个商放在最高位。变量p的作用就是控制位数,变量y的初始值定为0,变量p的初始值定为1,每次循环内变量p都自乘10,每次循环内都让变量y加上yushu*p,这样就实现了余数的按位存放。最后将小于2的那个商乘以p加到变量y中,得到最后的二进制数。

    例如:还是以自变量7为例,第一次循环后y的值为1,第二次循环内if语句之前y的值为11,if语句内y的值变为111,111即为7的二进制数。

    注意:变量p的自乘要放在变量y加上yushu*p之后!顺序不能颠倒!

    欢迎大家关注/订阅我的微信公众号Code Art Online,我会在我的公众号分享个人见闻,发现生活趣味;这里不仅有0和1,还有是诗和远方↓↓↓

    展开全文
  • 十进制小数转换成二进制小数把十进制小数转换成二进制小数所采用的规则是“乘以2取整数”。方法是用2乘以十进制纯小数,将其结果的整数部分去掉;再用2乘余下的纯小数部分,再去掉其结果的整数部分;如此继续下去,...

    十进制小数转换成二进制小数

    把十进制小数转换成二进制小数所采用的规则是“乘以2取整数”。方法是用2乘以十进制纯小数,将其结果的整数部分去掉;再用2乘余下的纯小数部分,再去掉其结果的整数部分;如此继续下去,直到余下的纯小数为0或满足所要求的精度为止。最后将每次得到的整数部分(0或1)按先后顺序从左到右排列,即得到所对应的二进制小数。

    0.6875*2=1.375(取1)

    (1.375-1)*2=0.75(取0)

    0.75*2=1.5(取1)

    (1.5-1)*2=1(取1)

    1-1=0(到这就结束了)

     

    十进制转二进制: 
    用2辗转相除至结果为1 
    将余数和最后的1从下向上倒序写 就是结果 
    例如302 
    302/2 = 151 余0 
    151/2 = 75 余1 
    75/2 = 37 余1 
    37/2 = 18 余1 
    18/2 = 9 余0 
    9/2 = 4 余1 
    4/2 = 2 余0 
    2/2 = 1 余0 
    故二进制为100101110

    二进制转十进制 
    从最后一位开始算,依次列为第0、1、2...位 
    第n位的数(0或1)乘以2的n次方 
    得到的结果相加就是答案 
    例如:01101011.转十进制: 
    第0位:1乘2的0次方=1 
    1乘2的1次方=2 
    0乘2的2次方=0 
    1乘2的3次方=8 
    0乘2的4次方=0 
    1乘2的5次方=32 
    1乘2的6次方=64 
    0乘2的7次方=0 
    然后:1+2+0 
    +8+0+32+64+0=107. 
    二进制01101011=十进制107.

    展开全文
  • 十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 ...

    1.十进制转R进制

    1.1 十进制转二进制

    十进制整数转二进制

    十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。

    例题: 135D = ______ B

    **解析:**如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 0111B.
    这里写图片描述

    图1.十进制整数转二进制

    十进制小数转二进制

    十进制小数转换成二进制小数采用 “乘2取整,顺序排列” 法。

    具体做法是:

    用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。

    然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。

    例题: 0.68D = ______ B(精确到小数点后5位)

    **解析:**如下图所示,0.68乘以2,取整,然后再将小数乘以2,取整,直到达到题目要求精度。得到结果:0.10101B.

    在这里插入图片描述

    图2.十进制小数转二进制

    1.2 十进制转八进制

    思路和十进制转二进制一样,参考如下例题:

    例题: 10.68D = ______ Q(精确到小数点后3位)

    **解析:**如下图所示,整数部分除以8取余数,直到无法整除。小数部分0.68乘以8,取整,然后再将小数乘以8,取整,直到达到题目要求精度。得到结果:12.534Q.

    这里写图片描述

    图3.十进制转八进制

    1.3 十进制转十六进制

    思路和十进制转二进制一样,参考如下例题:

    例题: 25.68D = ______ H(精确到小数点后3位)

    **解析:**如下图所示,整数部分除以16取余数,直到无法整除。小数部分0.68乘以16,取整,然后再将小数乘以16,取整,直到达到题目要求精度。得到结果:19.ae1H.

    这里写图片描述

    图4.十进制转十六进制
    # 2.R进制转十进制 ## 2.1 二进制转十进制 **方法为:**把二进制数按权展开、相加即得十进制数。(具体用法如下图)

    例题: 1001 0110B = ______ D

    **解析:**如下图所示。得到结果:150D.

    这里写图片描述

    图5.二进制转十进制

    2.2 八进制转十进制

    八进制转十进制的方法和二进制转十进制一样。

    例题: 26Q = ______ D

    **解析:**如下图所示。得到结果:22D.

    这里写图片描述

    图6.八进制转十进制

    2.3 十六进制转十进制

    例题: 23daH = ______ D

    **解析:**如下图所示。得到结果:9178D.

    这里写图片描述

    图7.十六进制转十进制

    3.二进制转八进制

    二进制转换成八进制的方法是,取三合一法,即从二进制的小数点为分界点,向左(或向右)每三位取成一位。

    例题: 1010 0100B = ____Q

    **解析:**计算过程如下图所示。得到结果:244Q.

    这里写图片描述

    图8.二进制转八进制

    4.二进制转十六进制

    二进制转换成八进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位。

    例题: 1010 0100B = ____H

    **解析:**计算过程如下图所示。得到结果:a4H.

    这里写图片描述

    图9.二进制转十六进制

    5.工欲善其事,必先利其器

    下面的表格是8位二进制所对应的十进制数值,对进制转换以及类似题目的理解非常有用:

    1 1 1 1 1 1 1 1 B
    128 64 32 16 8 4 2 1 D

    注:B:二进制
           D:十进制


    例题: 135D = ______ B

    **解析:**有了上面二进制对应十进制数值的表格,我们就可以将题目给的十进制135拆分为:128+7,再从表格中找到对应的数值,拼凑即可得到答案。
    135D = 128D + 7D = 1000 0111B

    展开全文
  • c语言 十进制转换成二进制 递归实现

    千次阅读 多人点赞 2019-01-05 17:09:13
    c语言 十进制转换成二进制 递归实现,函数代码很短,但是很难懂! int fun(int n) //十进制转换成二进制递归函数 { if(n) //递归停止的条件 { fun(n/2); //递归 printf("%d",n&amp;1); } } ...

    c语言 十进制转换成二进制 递归实现,函数代码很短,但是很难懂!
    这里再附上最近写的十进制转换二进制–栈实现

    int fun(int n)	//十进制转换成二进制递归函数 
    {
    	if(n)	//递归停止的条件 
    	{
    		fun(n/2);	//递归 
    		printf("%d",n&1);
    	}
    }
    

    在理解这个递归函数之前,先学了学递归是怎么实现的。
    例如:

    int fun1(int n)	//随便写的递归函数
    {
    	if(n)	//递归终止条件 
    	{
    		printf("%d  ",n);
    		fun1(n/2);
    		printf("%d  ",n);
    	}
    }
    

    根据这个函数运行,输入n=12,则输出的是12 6 3 1 1 3 6 12。
    为了能直观的看出递归函数是怎么运行的,需要进行拆分;上面这个函数可以拆分成这样。

    int fun1(int n)	//假设你=12
    {
    	if(n)
    	{
    		printf("%d  ",n);
    		int fun1(n=6)
    		{
    			if(n) 
    			{
    				printf("%d  ",n);
    				int fun1(n=3)
    				{
    					if(n)
    					{
    						printf("%d  ",n);
    						int fun1(n=1)
    						{
    							if(n)
    							{
    								printf("%d  ",n);
    								int fun1(n=0)
    								{
    									if(n) 
    									{
    										printf("%d  ",n);
    										printf("%d  ",n);
    									}
    								}
    								printf("%d  ",n);
    							}
    						}
    						printf("%d  ",n);
    					}
    				}
    				printf("%d  ",n);
    			}
    		}
    		printf("%d  ",n);
    	}
    }
    

    拆分出来的代码不能运行,因为函数中不能定义函数。
    代码是自上向下运行的,所以就不难看出递归函数输出的是12 6 3 1 1 3 6 12。
    通过理解这个举例的递归函数,这个十进制转换成二进制递归函数就变得简单了;总代码如下:

    #include <stdio.h>
    #include <stdlib.h>
    
    int fun(int n)	//十进制转换成二进制递归函数 
    {
    	if(n)	//递归停止的条件 
    	{
    		fun(n/2);	//递归 
    		printf("%d",n&1);
    	}
    }
    
    int main()
    {
    	int a;
    	scanf("%d",&a);		//输入要转换成二进制的数 
    	fun(a);		//运用函数 
    	system("pause");
    	return 0;
    }
    
    
    展开全文
  • 十进制转换成二进制和十六进制的方法 十进制数转换成二进制数-般分为两个步骤,即整数部分的转换和小数部分的转换。 (1 )整数部分的转换 *除2取余法:*这种方法是由于D10=N2 =dn-1x2n-1十dn-2x2n-2 +… d1x21十d0x20,...
  • 本文转载出自于:... 把图片转换成二进制--把二进制转换成图片 private void button1_Click(object sender, EventArgs e) { string path = this....
  • int转换成二进制数字

    千次阅读 2018-12-04 12:09:54
    import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner input = new Scanner(System.in);...请输入要转换成二进制的数字:"); int z = input.nextInt()...
  • 十进制转换成二进制(左边补零)

    千次阅读 2019-08-11 16:16:31
    十进制转换成二进制,左边补零
  • 【JavaScript实现十进制转换成二进制】 什么是二进制 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是...
  • 第一部分:整数转换 逐次除2取余法用2逐次去除待...例子1: 将83转换成二进制数(逐次除2取余法) 得到的余数依次为: 1 0 1 0 0 1 1 可得到:(83)10=(1010011)2第二部分:小数转换 乘2取整法逐次用2去乘待...
  • python中将数字转换成二进制

    千次阅读 2020-09-05 07:09:49
    python中将数字转换成二进制数 256 128 64 32 16 8 4 2 1 1 0 1 0 1 0 1 1 0 这是快速得到342的方法 在python3.6中快速得到342的方法是使用bin,bin(342)
  • 最近学C++的时候想了个问题,能否将文件或图片转换成二进制的字符串, 然后在需要的时候将二进制数据转换成文件能,这样就相当于模拟了文件上传的过程, 希望有源码配上详细的注释
  • 十进制转换成二进制 void conversion(){ InitStack(S); scanf(“%d”,n); while(N){ Push(S,n%2) n=n/2; } while(!StackEmpty(S)){ Pop(S,e); printf(“%d”,e); } }//conversion
  • printf("十六进制->二进制\n"); int i,a,b,c,d,k; int x[3]; char m[3]={0,0,0},n[3]; printf("转换数(十六进制):"); scanf("%s",m); for(i=0;i;i++) { if(m[i]>='A'&&m[i]) { x[i]=10+m[i]-65; printf("%d\n",x...
  • 汇编语言:将四位十六进制数转换成二进制数题目要求运行截图编程平台代码实现 题目要求 从键盘接收一个四位的十六进制数,将其转换成二进制数后输出,不考虑错误输入。 运行截图 编程平台 Masm for Windows 集成...
  • 十进制数转二进制数,跟据不同的开发语言其转换方式有很多,在Java中如果相把一个十进制的整数来转换成二进制那是举手之劳,非常简单,只要用Integer.toBinaryString(int)方法就可以得到结果。但如果转换的不是一个...
  • int转换成二进制字符串

    千次阅读 2016-03-26 18:29:41
     对于JAVA要想将整型转换成二进制数可以直接使用包装类的toBinaryString方法,如Integer.toBinaryString(int i),该方法利用的是位运算,JDK源码如下: public static String toBinaryString(int i) { return ...
  • 将十进制数转换成二进制

    千次阅读 2018-08-02 01:03:48
    用户输入一个十进制正整数,将其转换成二进制输出。示例代码如下: #include&lt;stdio.h&gt; int main() { int num,c,i=0; int a[100]; printf("输入一个正整数:"); scanf("%d"...
  • 十进制小数转换成二进制的原理理解

    千次阅读 多人点赞 2018-03-08 05:28:21
    十进制小数转换成二进制的原理理解 在学习浮点数据类型的时候,涉及到了10进制的小数如何转2进制数的问题(此文章不讨论精度问题,仅涉及转换原理--乘2取整).学习到的方法是“乘2取整“,但是一直不知道具体原理是...
  • 在一些数据处理过程中,需要将一组十进制小数转换成二进制数存储或者计算,这种操作在FPGA的使用中会经常遇到。本文分析了十进制小数转换成二进制数的方法。 1.N位二进制数的取值范围 N位无符号型(unsigned)取值...
  • 如何把一个整数转换成二进制

    万次阅读 2016-11-08 21:37:01
    下面介绍一种把键盘输入的整数转换成二进制的方法:程序如下: #include void int2bin1(int num) { int i; for(i = 1; i ; i++) { if((unsigned int)(num & 0x80000000) == (unsigned int)(0x80000000)) {
  • //表示a转换成二进制输出格式的位数 void cal(int p) { int i; for (i=len-1;i&gt;=0;i--) { if (p&amp;(1&lt;&lt;i)) cout&lt;&lt;1; else cout&lt;&lt;0; ...
  • 十进制小数转换成二进制小数的快速方法  Windows自带的计算器可以方便地把十进制的整数转换成二进制的整数,但是十进制的小数则无法直接转换成二进制的小数。  今天,我发现了一个快速的解决办法! ...
  • 数据传输中,经常会与下位机通讯,用串口或者tcp,经常会遇到如何把结构体转换成二进制数据的问题,在此提供两个常用的方法,以供参考。 首先定义结构体,注意保证字节对齐: #pragma pack(push, 1) struct ...
  • 如何用Java将一个十进制数转换成二进制,我用数学中的老方法试试(初学者 如果你有更好方法请多指教)写Java代码如下:class toBin { public static void main(String[] args) { int num=88; //要求二进制的值 ...
  • 编写程序把任意10进制整数转换成二进制数。 #include <iostream> using namespace std; int main(){ int n; cin>>n; int t=0; int yu[105]; for(int i=1;;i++){ ...
  • 将float类型的十进制数转换成二进制(小数点保留四位) ** package App_suanfa; import java.util.Scanner; public class TenToTwo { public static void main(String[] args) { float num = 0; int...
  • 负数如何转换成二进制

    千次阅读 2014-10-28 21:54:25
    负数如何转换成二进制  2010-07-09 09:32:11| 分类: 学术文章 | 标签: |举报 |字号大中小 订阅 1个字节它不管怎么样还是只能表示256个数,因为有符号所以我们就把它表示范围:-128-127。它...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 679,753
精华内容 271,901
关键字:

怎么转换成二进制