八进制转十六进制是怎么转换的?(仅回答这一个问题)

来源:百度知道 编辑:UC知道 时间:2024/06/15 03:25:51
好像不能直接转换,是这样的吗?
必须要用一个中间值才行,是吗?比如用二进制做中间或十进制,间接转换是这样的吗?
如果8能直接转16,那有什么公式?

例如八进制37,3和7分别转换成三位二进制数,7等于111,三等于011,37等于011111
四位二进制等于一位十六进制1F

用八进制的一个数转换成两个十六进制!

八进制转换成十六进制:不能直接转换,通过将其中一个转换成二进制,再由二进制进行转换。

考虑一个10进制数123,数字1、2、3在这个数中的重要性是不一样的,3代表的是100的3倍,2代表101的2倍,而1代表的则是102的1倍。数学上把100,101和102称为对应数位上的权重(简称权),分别表示了对应位上的数字对整个数值的“贡献”。对于10进制数来说,各位权从小到大分别是100、101、102……,都是10的各次幂。对于各位上的数字,我们称为某权的系数,简称系数。

其他进制数也存在同样的问题,例如2进制数各位权重分别是2的各次幂,8进制数是8的各次幂等等。

需要说明的是,各种进制数都是人们为了理解数而进行的一种表述,在计算机计算过程中,是不存在进制这种概念的,对于C语言表示数的三种形式:0x12(16进制)、18(10进制)和022(8进制),在内存中都是一样的。

如果已经知道一个数k,在某种进制w条件下,计算各位的系数一般采用除余法,基本算法如下:

首先估计这个数的最大位数N
n = N,divisor = wn-1
b(n) = k / divisor, k = k % divisor,divisor = divisor /w,n --
如果n ==0算法结束 ,否则转3
例如对于C语言中的unsigned char 类型,最大可能为3位8进制数,如果已经知道一个数n=252,计算8进制的过程如下:

N =3
n = N,divisor = 8n-1 = 64
b(3) = 252 / 64 = 3, k = k % 64 =60,divisor = divisor /8 = 8,n -- = 2
b(2) = 60/8 = 7,k = k %8 =4,divisor = 8/8 =1,n = 1
b(1) = k / 1= 4 ,k=k %1