精华内容
下载资源
问答
  • C语言实现二进制八进制和十六进制转换 二进制转换十进制 再将十进制转换R进制
  • 二进制如何转换成八进制

    万次阅读 2021-01-17 03:04:29
    展开全部二进制转换为八进制方法:1、取三合一法,即从二进制的小数点为分界点,32313133353236313431303231363533e58685e5aeb931333431366431向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是...

    展开全部

    二进制转换为八进制方法:

    1、取三合一法,即从二进制的小数点为分界点,32313133353236313431303231363533e58685e5aeb931333431366431向左(向右)每三位取成一位,接着将这三位二进制按权相加,得到的数就是一位八位二进制数,然后,按顺序进行排列,小数点的位置不变,得到的数字就是我们所求的八进制数。

    如果向左(向右)取三位后,取到最高(最低)位时候,如果无法凑足三位,可以在小数点最左边(最右边),即整数的最高位(最低位)添0,凑足三位。例:

    ①将二进制数101110.101转换为八进制

    得到结果:将101110.101转换为八进制为56.5

    ② 将二进制数1101.1转换为八进制

    得到结果:将1101.1转换为八进制为15.4

    2、取一分三法,即将一位八进制数分解成三位二进制数,用三位二进制按权相加去凑这位八进制数,小数点位置照旧。例:

    ① 将八进制数67.54转换为二进制

    因此,将八进制数67.54转换为二进制数为110111.101100,即110111.1011

    056668a4d5d7956c7052e5dc6e72e034.png

    扩展资料:

    2进制的基数是0,1

    8进制的基数是0,1,2,3,4

    展开全文
  • C语言-顺序栈实现十进制转换为二进制-八进制-十六进制
  • 先将一个十进制数转换成二进制数; (构造一个0 ~2^30的数组,用number和数组中每个元素逆序比大小, 如果number >= quan_arr[i], 就让number -= quan_arr[i]; 并且该位置的数就置为1,否则该位置的数置为0, ...

    进制转换的原理:

    1. 先将一个十进制数转换成二进制数;
      (构造一个0 ~2^30的数组,用number和数组中每个元素逆序比大小, 如果number >= quan_arr[i], 就让number -= quan_arr[i]; 并且该位置的数就置为1,否则该位置的数置为0, 直到number减为0);
    2. 对quan_arr数组进行不同进制的处理,贪心算法
      贪心算法的思想,从局部最优到整体最优;
      例如八进制:3位可以表示一个数,从数组的0下标开始,依次往后取三位计算出值存入一个临时数组中,所有的二进制位计算完毕后, 将临时数组的值输出即可;
    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <math.h>
    #define MAX_VALUE 2147483648
    
    void two(int* arr, int high);
    void eight(int* arr, int high);
    void sixteen(int* arr, int high);
    
    
    void two(int* arr, int high)
    {
    	if(arr == NULL || high < 0)
    		return;
    	printf("二进制:");
    	for(int i = high; i >=0; i--)
    	{
    		printf("%d",arr[i]);
    	}
    	printf("\n");
    }
    void eight(int* arr, int high)
    {
    	if(arr == NULL || high < 0)
    		return;
    	printf("八进制:");
    	int sum = 0;
    	int count = high / 3 + 1;
    	int j = 0;
    	int* tmp =(int*)malloc(sizeof(int) * count);
    	if(tmp == NULL) return;
    	memset(tmp, 0, sizeof(int) * count);
    
    	for(int i = 0; i <= high; i++)
    	{
    		sum += pow(2.0, i % 3) * arr[i];
    		if((i + 1) % 3 == 0 || i == high)
    		{
    			tmp[j++] = sum;
    			sum = 0;
    		}
    	}
    	for(int i = count; i >= 0; i--)
    	{
    		printf("%d", tmp[i]);
    	}
    	printf("\n");
    	free(tmp);
    	tmp = NULL;
    }
    
    void sixteen(int* arr, int high)
    {
    	if(arr == NULL || high < 0)
    		return;
    	printf("十六进制:");
    	int sum = 0;
    	int count = high / 4 + 1;
    	int j = 0;
    	int* tmp =(int*)malloc(sizeof(int) * count);
    	if(tmp == NULL) return;
    	memset(tmp, 0, sizeof(int) * count);
    
    	for(int i = 0; i <= high; i++)
    	{
    		sum += pow(2.0, i % 4) * arr[i];
    		if((i + 1) % 4 == 0 || i == high)
    		{
    			tmp[j++] = sum;
    			sum = 0;
    		}
    	}
    	for(int i = count; i >= 0; i--)
    	{
    		printf("%x", tmp[i]);
    	}
    	printf("\n");
    	free(tmp);
    }
    //贪心算法实现进制的转换
    int calculate(int num)
    {
    	if(num < 0 || num > MAX_VALUE)
    		return -1;
    	int* quan_arr = (unsigned int*)malloc(sizeof(unsigned int) * 31);
    	if(quan_arr == NULL) return -1;
    	memset(quan_arr, 0, sizeof(int) * 31);
    	for(int i = 0; i < 31; i++)
    	{
    		quan_arr[i] = (unsigned int)pow(2.0, (double)i);
    	}
    		//val   1 2 4 8 16 32...10737411824
    		//index 0 1 2 3 4  5 ...30           
    	for(int i = 30; i >=0; i--)
    	{
    		if(num >= quan_arr[i])
    		{
    			num -= quan_arr[i];
    			//将最高位制成1
    			quan_arr[i] = 1;
    		}
    		else
    		{
    			//不否和的0
    			quan_arr[i] = 0;
    		}
    	}
    		//得到quan_arr
    		//val 	:0 0 0 1 0 0 ... 二进制
    		//index	:0 1 2 3 4 5 6	...	下标
    		
    		//处理多余的0
    	int count = 0;
    	for(int i = 30; i >= 0; i--)
    	{
    		if(quan_arr[i] == 0)
    		{
    			continue;
    		}
    		count = i;
    		break;
    	}
    		//count下标对应的数字是第一个1是最高位
    	two(quan_arr, count);
    	eight(quan_arr, count);
    	sixteen(quan_arr, count);
    
    	free(quan_arr);
    	quan_arr = NULL;
    	return 0;
    
    }
    int main()
    {
    	int num = 0;
    	while(1)
    	{
    		printf("请输入一个十进制数(退出-1):\n");
    		scanf("%d",&num);
    		if(num == -1)
    			break;
    		calculate(num);
    	}
    	return 0;
    }
    

    结果:
    在这里插入图片描述

    展开全文
  • 实验目的:1、掌握栈的逻辑结构及存储结构;...完成数字十进制到八进制的转换。 输入示例: 请输入需转换的数的个数: 3 请输入需转换的数: 28,58,190 输出示例: 转换结果为: 1、 34 2、 72 3、 276
  • 二进制整数转八进制算法二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。八进制整数转二进制算法八进制整数转换为二进制整数时,每...

    二进制整数转八进制

    算法

    二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。

    八进制整数转二进制

    算法

    八进制整数转换为二进制整数时,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。

    案例

    二进制整数转八进制

    将二进制整数 1110111100 转换为八进制,转换过程如下:

    01b1d56b12deeb9e990c4571d20755f1.png

    我们将二进制的 1110111100 转成八进制,基本思想就是每三位二进制数字转换为一位八进制数字,然后从低位向高位依次进行,高位不足三位用零补齐。

    从上面可以看出,将二进制的 1110111100 转成八进制的最终结果为 1674。

    八进制整数转二进制

    将八进制整数 2743 转换为二进制,转换过程如下:

    c387d93f8f24d51eace777a2b75ec296.png

    我们将八进制的 2743 转成二进制,基本思想就是每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。

    从上面可以看出,将八进制的 2743 转成二进制的最终结果为 10111100011。

    二进制和八进制互转总结

    二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。

    八进制整数转换为二进制整数时,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。

    展开全文
  • C语言实现十进制转换成二八十六进制的转换,代码已经经过调试可以使用,放心下载!
  • 进制转换:二进制八进制、十六进制、十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言。 将二进制八进制、十六进制转换为十进制 二进制八进制和十六进制向十进制转换都非常容易,就是...

    进制转换:二进制、八进制、十六进制、十进制之间的转换

    不同进制之间的转换在编程中经常会用到,尤其是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转换成八进制的过程:

    http://c.biancheng.net/cpp/uploads/allimg/170915/1-1F9151J30K46.png

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170915/1-1F9151K641Z0.png

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

    2) 小数部分

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

    N乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分;

    将积的整数部分取出,再用N乘以余下的小数部分,又得到一个新的积;

    再将积的整数部分取出,继续用N乘以余下的小数部分;

    ……

    如此反复进行,每次都取出整数部分,用N接着乘以小数部分,直到积中的小数部分为0,或者达到所要求的精度为止。

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170918/1-1F91Q20520335.png

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170918/1-1F91QHI2I2.png

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

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

    十进制数字 36926.930908203125 转换成八进制的结果为 110076.7345

    十进制数字 42.6875 转换成二进制的结果为 101010.1011

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

    十进制

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    二进制

    0

    1

    10

    11

    100

    101

    110

    111

    1000

    1001

    1010

    1011

    1100

    1101

    1110

    1111

    10000

    八进制

    0

    1

    2

    3

    4

    5

    6

    7

    10

    11

    12

    13

    14

    15

    16

    17

    20

    十六进制

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    A

    B

    C

    D

    E

    F

    10

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

    十进制0.51对应的二进制为0.100000101000111101011100001010001111010111...,是一个循环小数;

    十进制0.72对应的二进制为0.1011100001010001111010111000010100011110...,是一个循环小数;

    十进制0.625对应的二进制为0.101,是一个有限小数。

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

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

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170919/1-1F919102I0949.png

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170919/1-1F919103A2R7.png

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

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170919/1-1F919104H9539.png

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

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

    http://c.biancheng.net/cpp/uploads/allimg/170919/1-1F91910553H50.png

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

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

    展开全文
  • 1、背景(Contexts)之前使用SQL进制的整数转换为三十六进制,SQL代码请参考:SQL Server 进制转换函数,其实它是基于、十、十六进制转换的计算公式的,进制之间的转换是很基础的知识,但是我发现网络上没有...
  • 十六进制(Hexadecimal):在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15。 十进制(Decimal System):每相邻的两个计数单位之间的进率都为十;十进制是中华民族的一...
  • 一,十进制(decimal system)转换函数说明 1,十进制转二进制 decbin() 函数,如下实例 echo decbin(12); //输出 1100 echo decbin(26); //输出 11010 decbin ... 2,十进制转八进制 decoct() 函数 echo decoct(15)
  • 在软件编程的时候,会要用到进制转换,那么二进制怎么转换成八进制呢?接下来就为大家详细讲解一下,一起来看看吧!二进制转换为八进制方法:1、取三合一法,即从二进制的小数点为分界点,向左(向右)每三位取成一位...
  • 我们平时使用的数字都是由 0~9 共十个数字组成的,例如 1、9、10、297、952 等,一个数字最多能表示九,如果要表示十、十一、十九、一百等,就需要多个数字组合起来。例如表示 5+8 的结果,一个数字不够,只能”...
  • 进制转换二进制八进制Prerequisite: Number systems 先决条件: 数字系统 To convert binary numbers into octal numbers, we first have to understand the relationship between binary and octal numbers. ...
  • 二进制转换为八进制或十六进制

    千次阅读 2017-05-21 21:18:50
    注:3位二进制成八进制是从右到左开始转换,不足时补0。  示 例:把二进制数1001 0110转换为八进制数   即二进制数1001 0110转为后为八进制数226。 》八进制转换为二进制  #八进制数通过除以2取余,余数...
  • C语言二进制转换为八进制C语言二进制转换为八进制完整源码 C语言二进制转换为八进制完整源码 #include <stdio.h> // Function that returns the last three digits int three_digits(int n) { int r, d = 0,...
  • 值得注意的是,存放二进制的数组...二进制转换为八进制是非常简单的,因为每三个二进制就是一位八进制.如果不足三位二进制则补0. 例如: 10101 –>010 101 –>25 1101 –> 001 101 –> 15 思路有了,接下来就是思路转
  • C 语言实例 – 八进制二进制相互转换八进制二进制相互转换。实例 - 二进制转换为八进制#include #include int convertBinarytoOctal(long long binaryNumber);int main(){long long binaryNumber;printf("输入一...
  • 其方法与二进制转换十进制差不多:按权相加法,即将八进制每位上的数乘以位权(如8,64,512….),然后将得出来的数再加在一起。 如将72.45转换为十进制。如图1所示 来看看十进制转八进制,有两种方法:直接法与...
  • BinaryCalculator #本app具有二进制八进制、十进制、十六进制互相转换的功能。
  • #coding=utf-8import reprint("十进制转换成二进制八进制、十六进制")num = input("请输入一个十进制的整数:")pattern = re.compile(r'[^0-9]+')if(re.search(pattern,num)):print("输入的格式不正确")else:num = ...
  • #include "iostream" using namespace std; #define MAX 50 int main()//二转 ... cout 请输入二进制数,并以‘$’结束:"; char elem2[MAX]; int flag = 1; char ch; int i = 0; while (flag) {
  • '十进制数转换为二进制数' result = "" num = int(input("请输入一个十进制")) #验证结果 print(bin(num)) while(not(num == 0)): ret = num %2 num = num/2 result = str(ret) + result ...
  • 先从右向左三位分组(不够的用0补),...由于十六进制一位可以对应4位二进制数字,用十六进制来表示二进制较为方便。因此,八进制的应用不如十六进制,有一些程序设计语言提供了使用八进制符号来表示数字的能力,而且...
  • 展开全部public class JinZhiZhuanHua {public static void main(String[] args) {32313133353236313431303231363533e58685e5aeb931333433656637//使用查表法将十进制转换为二进制八进制、十六进制int num=60;...
  • 十进制:211,八进制:323,十六进制:D3。二进制转十进制的转换原理:整数部分从二进制的右边第一个数开始,每一个乘以2的n次方,n从0开始,每次递增1。然后得出来的每个数相加即是十进制数。小数部分要使用“乘 2 ...
  • 汇编语言各进制(二进制八进制,十进制,十六进制)之间的转换,一网打尽,包括源码,word文档和PDF文档
  • 十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到不能整除,然后再将余数从下至上倒取。得到结果:1000 ...
  • 一、十进制与二进制之间的转换 1、十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算...(注意事项,3位二进制成八进制是从右到左开始转...
  • 十进制转换成二进制 十进制转换成二进制,采用的是“除以2求余数”的计算方法,如下所示: “除以2”的过程,得到的余数是从低到高的次序,而需要的带的输出是从高位到低位(35对应的二进制是100011),因此需要一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,415
精华内容 53,366
关键字:

怎么把二进制换成八进制