精华内容
下载资源
问答
  • 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取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再...

    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位二进制所对应的十进制数值,对进制转换以及类似题目的理解非常有用:

    11111111B
    1286432168421D

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


    例题: 135D = ______ B

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

    展开全文
  • 2)请将下列十进制数转换为二进制: 156、2608、1043 1.2 方案 使用按权展开法将二进制数转换为十进制数,使用短除法除2取余计算十进制数转换为二进制数。 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一...

    1:数制转换

    1.1 问题

    1)请将下列数字转换为十进制数:

    (110010011111)2 、(10110101110)2

    2)请将下列十进制数转换为二进制:

    156、2608、1043

    1.2 方案

    使用按权展开法将二进制数转换为十进制数,使用短除法除2取余计算十进制数转换为二进制数。

    1.3 步骤

    实现此案例需要按照如下步骤进行。

    步骤一:二进制转十进制

    1)二进制数110010011111,转为十进制的结果是3231,转换过程如下:

    copytextpop-up

    1. (110010011111)2
    2. =1x211+1x210+0x29+0x28+1x27+0x26+0x25+1x24+1x23+1x22+1x21+1x20
    3. =2048+1024+0+0+128+0+0+16+8+4+2+1
    4. =3231

    (1100 1001 1111)2

    = 1x211+1x210+0x29+0x28+1x27+0x26+0x25+1x24+1x23+1x22+1x21+1x20

    = 2048+1024+0+0+128+0+0+16+8+4+2+1

    = 3231

    2)二进制数10110101110,转为十进制的结果是1454,转换过程如下:

    copytextpop-up

    1. (10110101110)2
    2. =1x210+0x29+1x28+1x27+0x26+1x25+0x24+1x23+1x22+1x21+0x20
    3. =1024+0+256+128+0+32+0+8+4+2+0
    4. =1454

    (101 1010 1110)2

    = 1x210+0x29+1x28+1x27+0x26+1x25+0x24+1x23+1x22+1x21+0x20

    = 1024+0+256+128+0+32+0+8+4+2+0

    = 1454

    步骤二:十进制转二进制

    1)十进制数156,转为二进制的结果是10011100,转换过程如下:

    copytextpop-up

    1. 156除以2,商为78,余数为0
    2. 78除以2,商为39,余数为0
    3. 39除以2,商为19,余数为1
    4. 19除以2,商为9,余数为1
    5. 9除以2,商为4,余数为1
    6. 4除以2,商为2,余数为0
    7. 2除以2,商为1,余数为0
    8. 1除以2,商为0,余数为1
    9. 综上,将余数倒序排列,得10011100 。

    156除以2,商为78,余数为0;

    78除以2,商为39,余数为0;

    39除以2,商为19,余数为1;

    19除以2,商为9,余数为1;

    9除以2,商为4,余数为1;

    4除以2,商为2,余数为0;

    2除以2,商为1,余数为0;

    1除以2,商为0,余数为1;

    综上,将余数倒序排列,得10011100 。

    2)十进制数2608,转为二进制的结果是1010 0011 0000,转换过程如下:

    copytextpop-up

    1. 2608除以2,商为1304,余数为0
    2. 1304除以2,商为652,余数为0
    3. 652除以2,商为326,余数为0
    4. 326除以2,商为163,余数为0
    5. 163除以2,商为81,余数为1
    6. 81除以2,商为40,余数为1
    7. 40除以2,商为20,余数为0
    8. 20除以2,商为10,余数为0
    9. 10除以2,商为5,余数为0
    10. 5除以2,商为2,余数为1
    11. 2除以2,商为1,余数为0
    12. 1除以2,商为0,余数为1
    13. 综上,将余数倒序排列,得1010 00111 1100 。

    2608除以2,商为1304,余数为0;

    1304除以2,商为652,余数为0;

    652除以2,商为326,余数为0;

    326除以2,商为163,余数为0;

    163除以2,商为81,余数为1;

    81除以2,商为40,余数为1;

    40除以2,商为20,余数为0;

    20除以2,商为10,余数为0;

    10除以2,商为5,余数为0;

    5除以2,商为2,余数为1;

    2除以2,商为1,余数为0;

    1除以2,商为0,余数为1;

    综上,将余数倒序排列,得1010 00111 1100 。

    3)十进制数1043,转为二进制的结果是100 0001 0011,转换过程如下:

    copytextpop-up

    1. 1043除以2,商为521,余数为1
    2. 521除以2,商为260,余数为1
    3. 260除以2,商为130,余数为0
    4. 130除以2,商为65,余数为0
    5. 65除以2,商为32,余数为1
    6. 32除以2,商为16,余数为0
    7. 16除以2,商为8,余数为0
    8. 8除以2,商为4,余数为0
    9. 4除以2,商为2,余数为0
    10. 2除以2,商为1,余数为0
    11. 1除以2,商为0,余数为1
    12. 综上,将余数倒序排列,得100 0001 0011 。

     

    展开全文
  • 汇编语言进制数和十进制数相互转换课程设计!
  • 十进制数转换为进制数以及浮点数存储方法

    万次阅读 多人点赞 2019-03-22 15:45:26
    十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 1. 十进制整数转换为二进制整数 十进制整数转换为二进制整数采用"除2取余,逆序排列"法...

    一、十进制数转换为二进制数
    十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
    1. 十进制整数转换为二进制整数
    十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
    【例1 】 把 (173)10 转换为二进制数。
    在这里插入图片描述

    2.十进制小数转换为二进制小数
    十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
    然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
    【例2】把(0.8125)10转换为二进制小数。
    在这里插入图片描述
    【例3】(173.8125)10=( )2
    解: 由【例1】得(173)10=(10101101)2
    由【例2】得(0.8125)10=(0.1101)2
    把整数部分和小数部分合并得: (173.8125)10=(10101101.1101)2
    更具体二进制和十进制之间的转换参考:https://jingyan.baidu.com/article/597a0643614568312b5243c0.html

    二、浮点类型数据的存储
    对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,不论是float还是double在存储方式上都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。

    无论是单精度还是双精度在存储中都分为三个部分:

    符号位(Sign) : 0代表正,1代表为负
    指数位(Exponent):用于存储科学计数法中的指数数据,并且采用移位存储
    尾数部分(Mantissa):尾数部分
    其中float类型数据的存储方式如下图所示:
    在这里插入图片描述

    而double类型数据的存储方式为:
    在这里插入图片描述

    R32.24和R64.53的存储方式都是用科学计数法来存储数据的,比如8.25用十进制的科学计数法表示为:8.2510º,而120.5可以表示为:1.20510²。而计算机根本不认识十进制的数据,他只认识0,1。所以在计算机存储中,首先要将上面的数更改为二进制的科学计数法表示。8.25用二进制表示可表示为1000.01。120.5用二进制表示为:1111000.1。用二进制的科学计数法表示1000.01可以表示为1.0000110³,1111000.1可以表示为1.111000110^6。第一位都是1,所以可以将小数点前面的1省略,所以23bit的尾数部分,可以表示的精度却变成了24bit,道理就是在这里,那24bit能精确到小数点后几位呢,我们知道9的二进制表示为1001,所以4bit能精确十进制中的1位小数点,24bit就能使float能精确到小数点后6位,而对于指数部分,因为指数可正可负,8位的指数位能表示的指数范围就应该为:-127-128了,所以指数部分的存储采用移位存储,存储的数据为元数据+127,下面就看看8.25和120.5在内存中真正的存储方式。

    值得注意的一个问题是:书上说之所以要将指数加上 127 来得到阶码,是为了简化浮点数的比较运算,这一点我没有体会出来。但是通过 127 这个偏移量 (移码),可以区分出指数的正负。阶码为 127 时表示指数为 0;阶码小于 127 时表示负指数;阶码大于 127 时表示正指数。

    首先看下8.25,用二进制的科学计数法表示为:1.00001*10³

    按照上面的存储方式,符号位为:0,表示为正,指数位为:3+127=130 ,位数部分为,故8.25的存储方式如下图所示:
    在这里插入图片描述

    而单精度浮点数120.5的存储方式如下图所示:
    在这里插入图片描述
    具体浮点型数据存储方式参考:https://wenku.baidu.com/view/905828797fd5360cbb1adb07.html

    展开全文
  • 带符号的二进制数转换十进制数(python实现) 算法参考站内一个老哥,自己加了几句,加了个判断符号功能和一些注释 以下链接: 二进制转换十进制 sum = 0 str1 = input('请输入一个二进制数:') lenth = len(str1) #...
  • 1、整数转二进制数 //将一个int型整数转换为二进制数 string itob(int number) { string binNum; while (number) { binNum += '0' + number%2; number /= 2; } reverse(binNum.begin(), binNum.end()); ...
  • 二进制数转换十进制

    2008-02-07 23:43:58
    二进制转换为十进制
  • 把任意一个十进制数转换为二进制八进制十六进制数的c++源代码
  • 如何把单精度进制数转换成十进制数
  • 二进制如何转十进制十进制如何转二进制

    万次阅读 多人点赞 2018-04-06 17:57:29
    学计算机的朋友刚开始学习时都要接触进制之间的转换,二进制十进制、八进制、十六进制等,这个是很枯燥的,去就蒙圈了,别蒙别蒙,今天咱们一个一个搞定,看看二进制十进制之间如何相互转换的。...
  • 输入一个整十进制数n,把它转化为二进制,小数部分还没有考虑。。。
  • 进制转换
  • java_十进制数转换为二进制,八进制,十六进制数的算法
  • 二进制小数 十进制方法

    万次阅读 多人点赞 2019-04-09 19:32:43
    知识点一:一个数的负次方即为这个数的正次方的倒数。 方法一、转换分数法 参考文章:https://jingyan.baidu.com/article/597a0643614568312b5243c0.html ... 举例:将 二进制0.1111转换成 十进制数 二进制...
  • C++实现十进制数转二进制数程序

    千次阅读 2021-02-18 20:42:52
    C++实现十进制数转二进制数程序 转换方法 十进制的数要转换到进制数,需要把这个数(十进制情况下)除以2,得到余数0或1.然后循环操作,一直到这个数为1为止。 然后把所以得到的余数倒序读数,然后输出。 如29: ...
  • 因为C语言的printf函数的格式化输出只支持八进制和十六进制的输出,所以二进制需要自己实现。 这其中有几个难点,一是算法,二是数据结构。可以用二不断除被除数取余数,...2.对十进制数进行右移操作,保存在临时变...
  • 汇编语言:将ASCⅡ码表示的十进制数转换为进制数/十六进制数 你们好! 这是我的第一个汇编程序的博客,汇编是一个神奇的东西,你深入了解他之后会为他着迷的!!! 题目 将ASCⅡ表示的十进制数字转化为进制数,...
  • C语言栈的方式实现十进制数转换为进制数,完整代码,DEVC中直接使用
  • 主要思路: 1.核心思想依然是经典的除2取余法。但是由于C语言中整型数据中能够存放的最大的整数为unsigned long int...3.采用该方法理论上(不考虑计算机硬件存储空间)可实现任意大小的十进制数转二进制数。 /*-----...
  • 7-4 进制数转十进制数(20 分)

    千次阅读 2018-09-10 21:01:40
    输入仅由0和1构成的整数(即“二进制”数), 输出该数对应的十进制数。 输入格式: 输入仅由0和1构成的整数。 输出格式: 输出相应的十进制数。 输入样例: 在这里给出一组输入。例如: 101100 输出样例: 在...
  • 实现带小数的二进制数到十进制数的转换。二进制字符序列以字符‘#’结尾, 如 “1011.101#”。 将二进制数“1011.101”转换为十进制数二进制字符序列中只可能存在‘0’、‘1’、‘.’、‘#’ 4种字符,不会出现...
  • 二进制 二进制就是计算机常用的进制,即逢二进一。例如:1010 八进制 八进制即逢八进一。例如:626 十进制 ...十进制就是我们在计算中常用的进制,...1.二进制转八进制 拿二进制数10010110举例 首先需要3个二进...
  • 十进制数转二进制数

    千次阅读 2014-09-04 21:14:51
    一 整数 整数除以2,商继续除以2,得到0为止,将余数逆序排列。 ...所以22的二进制是10110 二 纯小数 小数乘以2,取整,小数部分继续乘以2,取整,得到小数部分0为止,将整数顺序排列。 以
  • 十进制数转换为进制数

    千次阅读 2015-08-12 16:14:53
    尾声前言题目:如何将一个十进制的数转换为二进制数?补充说明,这是我在做一个项目时发现的问题,因此顺手把这个问题给解决了一下。代码#include using namespace std;//函数binary说明:整个函数为递归实现,其中...
  • 在实际开发中,我们可能会...1、自定义的二进制字符串转十进制bintodec 思路:把二进制字符串从最高位(左边第一位)开始用商乘以2再加余数(该位的数字),如此循环,左边第一位的商肯定是0。 例如1111011转化成十...
  • 将 ASCII 码表示的十进制数转换为进制数
  • Perl十进制数字转换为二进制字符

    千次阅读 2018-10-16 14:19:03
    项目需要,随笔记录一下。...#参数说明:$dec:十进制数,$str二进制字符 sub dec_to_bin($$){ my $dec = shift; my $str = shift; if($dec &lt; 2){ $str = $dec.$str; if(length($str) &lt; ...
  • 题目大意就是将十进制数...十进制转二进制十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 434,835
精华内容 173,934
关键字:

二进制数转十进制数的方法