精华内容
下载资源
问答
  • 二进制怎么转换为八进制
    千次阅读
    2021-02-20 21:12:02

    C语言二进制转换为八进制

    C语言二进制转换为八进制完整源码

    #include <stdio.h>
    
    // Function that returns the last three digits
    int three_digits(int n)
    {
       
        int r, d = 0, p = 1
    更多相关内容
  • 二进制转换为八进制-栈方式实现

    千次阅读 2019-10-07 13:48:12
    文章目录二进制转换为八进制 二进制转换为八进制二进制转换为八进制,需要使用两个栈,一个栈用于存储二进制数据,另一个栈用于存储八进制数据。 ​ 每三个二进制数据代表一个八进制数据。因此,需要弹出三个二...

    二进制转换为八进制

    ​ 二进制转换为八进制,需要使用两个栈,一个栈用于存储二进制数据,另一个栈用于存储八进制数据。

    ​ 每三个二进制数据代表一个八进制数据。因此,需要弹出三个二进制数据并将其转换为对应的八进制,然后在将八进制数据压栈。

    /**********************************************************
     * @ 二进制转换为八进制 
     * 二进制转换为八进制,需要两个栈来实现,一个栈用于存储二进制数,
     * 另一个用于存储八进制数,二进制的每三位代表八进制的一位,弹出二进制
     * 的三位将其转换为八进制放入到八进制的栈中
     *********************************************************/
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    #define STACK_INIT_SIZE 20
    #define STACKINCREMENT  10
    
    typedef char ElemType;
    typedef struct
    {
        ElemType *base;
        ElemType *top;
        int stackSize;
    }sqStack;
    
    /**
     * @brief  初始化栈
     * @note   
     * @param  *s: 栈的地址
     * @retval None
     */
    void InitStack(sqStack *s);
    
    /**
     * @brief  压栈操作
     * @note   
     * @param  *s: 栈的地址
     * @param  e: 压栈的数据
     * @retval None
     */
    void Push(sqStack *s, ElemType e);
    
    /**
     * @brief  出栈操作
     * @note   
     * @param  *s: 栈的地址
     * @param  *e: 出栈的元素
     * @retval None
     */
    void Pop(sqStack *s, ElemType *e);
    
    
    /**
     * @brief  计算栈的长度
     * @note   
     * @param  s: 栈
     * @retval 
     */
    int StackLen(sqStack s);
    
    // 函数功能:初始化栈
    // 参数*s:栈的地址
    void InitStack(sqStack *s)
    {
        s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));
        if( !s->base )
        {
            exit(0);
        }
    
        s->top = s->base;
        s->stackSize = STACK_INIT_SIZE;
    }
    
    // 函数功能:入栈操作
    // 参数*s:栈的地址
    // 参数e:待压入栈的元素
    void Push(sqStack *s, ElemType e)
    {
        if( s->top - s->base >= s->stackSize )
        {
            s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT) * sizeof(ElemType));
            if( !s->base )
            {
                exit(0);
            }
    
            s->top = s->base + s->stackSize;
            s->stackSize = s->stackSize + STACKINCREMENT;
        }
    
        *(s->top) = e;
        s->top++;
    }
    
    // 函数功能:弹栈操作
    // 参数*s:栈的地址
    // 参数e:存放从栈里弹出的数据
    void Pop(sqStack *s, ElemType *e)
    {
        if( s->top == s->base )
        {
            return;
        }
        *e = *--(s->top);
    }
    
    // 函数功能:计算栈s的当前长度
    // 参数s:栈
    int StackLen(sqStack s)
    {
        return (s.top - s.base);
    }
    
    int main()
    {
        ElemType c;
        sqStack s1;
        sqStack s2;
        int len, i, j, sum = 0;
    
        InitStack(&s1); // 初始化栈s1,用来存放二进制输入
    
        printf("请输入二进制数,输入‘#’号表示结束!\n\n");
        scanf("%c", &c);
        while( c != '#' )
        {
            if( c=='0' || c=='1' )  // 检查输入是否二进制
                Push(&s1, c);
            scanf("%c", &c);
        }
        getchar();      // 把'\n'从缓冲区去掉
        len = StackLen(s1);
        printf("二进制栈的大小为: %d\n", len);
    
        InitStack(&s2); // 初始化栈s2,用来存放转换的八进制
    
        for( i=0; i < len; i+=3 )
        {
            for( j=0; j < 3; j++ )
            {
                Pop( &s1, &c ); // 取出栈顶元素
                sum = sum + (c-48) * pow(2, j);
    
                if( s1.base == s1.top )
                {
                    break;
                }
            }
    
            Push( &s2, sum+48 );
            sum = 0;
        }
    
        printf("\n转化为八进制数是: ");
        while( s2.base != s2.top )
        {
            Pop( &s2, &c );
            printf("%c", c);
        }
        printf("(O)\n");
    
        return 0;
    }
    
    
    展开全文
  • 二进制八进制、十六进制转换为十进制 二进制八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。 假设当前数字是 N 进制,那么: 对于整数部分,从右往左看,第 i 位的...

    上节我们对二进制、八进制和十六进制进行了说明,本节重点讲解不同进制之间的转换,这在编程中经常会用到,尤其是C语言。

    将二进制、八进制、十六进制转换为十进制

    二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。

    假设当前数字是 N 进制,那么:

    • 对于整数部分,从右往左看,第 i 位的位权等于Ni-1
    • 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。


    更加通俗的理解是,假设一个多位数(由多个数字组成的数)某位上的数字是 1,那么它所表示的数值大小就是该位的位权。

    1) 整数部分

    例如,将八进制数字 53627 转换成十进制:

    53627 = 5×84 + 3×83 + 6×82 + 2×81 + 7×80 = 22423(十进制)

    从右往左看,第1位的位权为 80=1,第2位的位权为 81=8,第3位的位权为 82=64,第4位的位权为 83=512,第5位的位权为 84=4096 …… 第n位的位权就为 8n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。

    注意,这里我们需要以十进制形式来表示位权。

    再如,将十六进制数字 9FA8C 转换成十进制:

    9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十进制)

    从右往左看,第1位的位权为 160=1,第2位的位权为 161=16,第3位的位权为 162=256,第4位的位权为 163=4096,第5位的位权为 164=65536 …… 第n位的位权就为 16n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。

    将二进制数字转换成十进制也是类似的道理:

    11010 = 1×24 + 1×23 + 0×22 + 1×21 + 0×20 = 26(十进制)

    从右往左看,第1位的位权为 20=1,第2位的位权为 21=2,第3位的位权为 22=4,第4位的位权为 23=8,第5位的位权为 24=16 …… 第n位的位权就为 2n-1。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。

    2) 小数部分

    例如,将八进制数字 423.5176 转换成十进制:

    423.5176 = 4×82 + 2×81 + 3×80 + 5×8-1 + 1×8-2 + 7×8-3 + 6×8-4 = 275.65576171875(十进制)

    小数部分和整数部分相反,要从左往右看,第1位的位权为 8-1=1/8,第2位的位权为 8-2=1/64,第3位的位权为 8-3=1/512,第4位的位权为 8-4=1/4096 …… 第m位的位权就为 8-m。

    再如,将二进制数字 1010.1101 转换成十进制:

    1010.1101 = 1×23 + 0×22 + 1×21 + 0×20 + 1×2-1 + 1×2-2 + 0×2-3 + 1×2-4 = 10.8125(十进制)

    小数部分和整数部分相反,要从左往右看,第1位的位权为 2-1=1/2,第2位的位权为 2-2=1/4,第3位的位权为 2-3=1/8,第4位的位权为 2-4=1/16 …… 第m位的位权就为 2-m。

    更多转换成十进制的例子:

    • 二进制:1001 = 1×23 + 0×22 + 0×21 + 1×20 = 8 + 0 + 0 + 1 = 9(十进制)
    • 二进制:101.1001 = 1×22 + 0×21 + 1×20 + 1×2-1 + 0×2-2 + 0×2-3 + 1×2-4 = 4 + 0 + 1 + 0.5 + 0 + 0 + 0.0625 = 5.5625(十进制)
    • 八进制:302 = 3×82 + 0×81 + 2×80 = 192 + 0 + 2 = 194(十进制)
    • 八进制:302.46 = 3×82 + 0×81 + 2×80 + 4×8-1 + 6×8-2 = 192 + 0 + 2 + 0.5 + 0.09375= 194.59375(十进制)
    • 十六进制:EA7 = 14×162 + 10×161 + 7×160 = 3751(十进制)

    将十进制转换为二进制、八进制、十六进制

    将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样,下面我们分别讲解。

    1) 整数部分

    十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:

    • 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
    • 保留余数,用商继续除以 N,又得到一个新的商和余数;
    • 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
    • ……
    • 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。


    把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。

    下图演示了将十进制数字 36926 转换成八进制的过程:


    从图中得知,十进制数字 36926 转换成八进制的结果为 110076。

    下图演示了将十进制数字 42 转换成二进制的过程:


    从图中得知,十进制数字 42 转换成二进制的结果为 101010。

    2) 小数部分

    十进制小数转换成 N 进制小数采用“乘 N 取整,顺序排列”法。具体做法是:

    • 用 N 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分;
    • 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积;
    • 再将积的整数部分取出,继续用 N 乘以余下的小数部分;
    • ……
    • 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求的精度为止。


    把取出的整数部分按顺序排列起来,先取出的整数作为 N 进制小数的高位数字,后取出的整数作为低位数字,这样就得到了 N 进制小数。

    下图演示了将十进制小数 0.930908203125 转换成八进制小数的过程:


    从图中得知,十进制小数 0.930908203125 转换成八进制小数的结果为 0.7345。

    下图演示了将十进制小数 0.6875 转换成二进制小数的过程:


    从图中得知,十进制小数 0.6875 转换成二进制小数的结果为 0.1011。

    如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换,然后再合并在一起即可。例如:

    • 十进制数字 36926.930908203125 转换成八进制的结果为 110076.7345;
    • 十进制数字 42.6875 转换成二进制的结果为 101010.1011。


    下表列出了前 17 个十进制整数与二进制、八进制、十六进制的对应关系:

    十进制012345678910111213141516
    二进制0110111001011101111000100110101011110011011110111110000
    八进制01234567101112131415161720
    十六进制0123456789ABCDEF10


    注意,十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。请看下面的例子:

    • 十进制 0.51 对应的二进制为 0.100000101000111101011100001010001111010111...,是一个循环小数;
    • 十进制 0.72 对应的二进制为 0.1011100001010001111010111000010100011110...,是一个循环小数;
    • 十进制 0.625 对应的二进制为 0.101,是一个有限小数。

    二进制和八进制、十六进制的转换

    其实,任何进制之间的转换都可以使用上面讲到的方法,只不过有时比较麻烦,所以一般针对不同的进制采取不同的方法。将二进制转换为八进制和十六进制时就有非常简洁的方法,反之亦然。

    1) 二进制整数和八进制整数之间的转换

    二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。下图演示了如何将二进制整数 1110111100 转换为八进制:


    从图中可以看出,二进制整数 1110111100 转换为八进制的结果为 1674。

    八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将八进制整数 2743 转换为二进制:


    从图中可以看出,八进制整数 2743 转换为二进制的结果为 10111100011。

    2) 二进制整数和十六进制整数之间的转换

    二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:


    从图中可以看出,二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C。

    十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将十六进制整数 A5D6 转换为二进制:


    从图中可以看出,十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110。

    在C语言编程中,二进制、八进制、十六进制之间几乎不会涉及小数的转换,所以这里我们只讲整数的转换,大家学以致用足以。另外,八进制和十六进制之间也极少直接转换,这里我们也不再讲解了。

    总结

    本节前面两部分讲到的转换方法是通用的,任何进制之间的转换都可以采用,只是有时比较麻烦而已。二进制和八进制、十六进制之间的转换有非常简洁的方法,所以没有采用前面的方法。

    展开全文
  • 这是从网上搜索的一篇也的还可以的Python进制转换,经过验证可以使用。下面贴出它的实现代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # 2/10/16 base trans. wrote by srcdog on 20th, April, 2009 # ld ...
  • //输出 11010 decbin (PHP 3, PHP 4, PHP 5) decbin — 十进制转换为二进制 说明 string decbin ( int number ) 返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值十进制的 4294967295,其...
  • 二进制八进制的互相转换二进制与的转换类似,区别在于需要操作的是三位一组而不是四位。表2-2列出了二进制八进制的等效表示。二进制八进制算法为了把换算为二进制,将每一个八进制数字替换成表2-2中对应的三...

    二进制与八进制的互相转换和二进制与的转换类似,区别在于需要操作的是三位一组而不是四位。表2-2列出了二进制与八进制的等效表示。

    二进制转八进制算法

    为了把换算为二进制,将每一个八进制数字替换成表2-2中对应的三位。例如,八进制123换算成结果就是001010011:

    b4971db67fa43598a8daf6e72b156fa7.png

    表2-2 二进制/八进制换算表

    34154e75f80b2971f5a8925cf88f2e8d.png

    为了将一个换算为八进制,只需将二进制串划分成每三个位一组(如果需要的话,在前面补零),然后查表2-2,将三位一组的位串替换为相应的字即可。

    如果需要将八进制数换算为,只需将八进制数换算为二进制,然后再换算为十六进制即可。

    八进制化为十进制:

    例:将八进制数12转换成

    9c724136cafb83e9f2c631d573130b7c.png

    八进制化为二进制:

    规则:按照顺序,每1位改写成等值的3位,次序不变。

    例: (17.36)8 = (001 111 .011 110)2 = (1111.01111)2

    八进制化为

    先将八进制化为二进制,再将二进制化为十六进制。

    例:(712)8 = (1110 0101 0)2 = (1CA)16

    转换为八进制

    二进制化为八进制:

    部份从最低有效位开始,以3位一组,最高有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的整数。

    小数部份从最高有效位开始,以3位一组,最低有效位不足3位时以0补齐,每一组均可转换成一个八进制的值,转换完毕就是八进制的小数。

    例:(11001111.01111)2 = (011 001 111.011 110)2 = (317.36)8

    十六进制化为八进制:

    先用1化4方法,将化为二进制;再用3并1方法,将二进制化为8制。

    例: (1CA)16 = (111001010)2 = (712)8

    说明:小数点前的高位零和小数点后的低位零可以去除。

    化八进制

    方法1:采用除8取余法。

    例:将115转化为

    8| 115…… 3

    8| 14 …… 6

    8| 1 …… 1

    结果:(115)10 = (163)8

    方法2:先采用十进制化二进制的方法,再将二进制数化为八进制数

    例:(115)10 = (1110011)2 = (163)8

    展开全文
  • 1、二进制转为八进制(把二进制数从右向左每3位分为一组,不足左边补0,如果是负数记得最后结果加上符号) 八进制 0 1 2 3 4 5 6 7 二进制 000 001 010 011 100 101 ...
  • 进制转换为二进制八进制、十六进制 从十进制向其它进制转换,用的是就用该数字不断除以要转换的进制数,读取余数。连接一起就可以了。 复制代码 代码如下: <?php /** *十进制转二进制八进制、十六进制 不足...
  • 二进制如何转换八进制

    万次阅读 2021-01-17 03:04:29
    展开全部二进制转换为八进制方法:1、取三合一法,即从二进制的小数点分界点,32313133353236313431303231363533e58685e5aeb931333431366431向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是...
  • 使用Python内置函数:bin()、oct()、int()、hex()可实现进制转换。 先看Python官方文档中对这几个内置函数的描述: bin(x) Convert an integer number to a binary string. The result is a valid Python expression...
  • 输入:表示位序列的行向量输出:一个行向量包含落入 [0,7] 的整数序列,这是八进制等效于给定的二进制序列。
  • 进制转换算法原理(二进制 八进制 十进制 十六进制),以前上学那会确实学过,长时间不用都忘了。
  • 计算机基础内容,必会,进制转换
  • 这篇文章主要介绍了使用Python内置函数:bin()、oct()、int()、hex()可实现进制转换的一些用法,需要的朋友可以参考下 使用Python内置函数:bin()、oct()、int()、hex()可实现进制转换。 先看Python官方文档中对这几...
  • 教程名称:计算机二进制转换基础知识课程目录:【】0.课程简介【】1.计算机系统进制概述【】2.十六进制与其它进制的转换【】3.二进制与其它进制的转换【】4.十进制与其它进制的转换【】计算机进制转换二进制、八进制...
  • c语言二进制转换八进制

    千次阅读 2018-12-30 15:46:03
    二进制转换为八进制 把要转换的二进制数按照3位一组从右边往左边分组。不足3位的在左边补上0 111001111001=001 110 001 111 001 #include&lt;stdio.h&gt; #define MAX 1024  /*****************往左补...
  • C语言-顺序栈实现十进制转换为二进制-八进制-十六进制
  • 但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合。而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数。如果想要弄懂这...
  • 二进制转换为八进制方法:1、取三合一法,即从二进制的小数点分界点,向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的...
  • 二进制转换八进制

    2021-01-15 19:31:04
    二进制转换八进制 题目描述 请将一个100位以内的二进制整数转换8进制整数! 输入 100位以内的二进制整数 输出 该数对应的八进制整数 样例输入复制 111100001111000011110000 样例输出复制 74170360 #include<...
  • 1.1 十进制转换为二进制,分为整数部分和小数部分 【1】整数部分 方法:采用"除2取余,逆序排列"法 即每次将整数部分除以2,余数该位权上的数,而商继续除以2,余数又上一个位权上的数,这个步骤一直持续...
  • 1、背景(Contexts)之前使用SQL把十进制的整数转换三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有...
  • 十进制整数转换二进制采用“除2倒取余”,十进制小数转换二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 ...
  • 二进制 十进制 八进制
  • 本文实例讲述了PHP实现十进制、二进制八进制和十六进制转换相关函数用法。分享给大家供大家参考,具体如下: 1.二进制: 1.1.二进制转十进制: 函数:bindec(string $binary_string) @param $binary_string 参数...
  • python input函数进制转换 input()函数-控制输入的进制数 格式化符号 %o八进制 %x十六进制 %d整数 PS:不要问什么没有二进制的格式化符号,问了就是不知道。 s=int(input(),16) #输入十六进制并将其转换十...
  • 一、二进制转换八进制 规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。 案例:请将 ob11010101 转成八进制 ob11(3)010(2)101(5) => 0325 二、二进制转换成十六进制 规则:从低位开始...
  • 进制转换二进制转八进制,十进制,十六进制二进制转八进制二进制转十进制二进制转十六进制八进制转二进制,十进制,...1:先将二进制转换成十进制 string-->int Convert.ToInt32("1010", 2)//输出: 10 2:再将十进制
  • 实例 - 二进制转换为八进制#include #include int convertBinarytoOctal(long long binaryNumber);int main(){long long binaryNumber;printf("输入一个二进制数: ");scanf("%lld", &binaryNumber)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 166,930
精华内容 66,772
热门标签
关键字:

二进制怎么转换为八进制