各进制数的表示方法
进制名称 | 英文简称 | 英文全称 | 表示为 |
---|---|---|---|
二进制 | B | Binary | 101B/(101)2 |
四进制 | Q | Quaternary | 101Q/(101)4 |
八进制 | O | Octal | 101O/(101)8 |
十进制 | D | Decimal | 101D/(101)10 |
十六进制 | H | Dexadecimal | 101H/(101)16 |
众所周知,十进制才是人类可识别的最常用的数制,所以也着重对十进制到其他进制以及其他进制到十进制的转换做较为详细的讲述:
转换为十进制:
二进制、四进制、八进制、十六进制如何转换为十进制。
假设一个数X的基数为M(表示为(X)M),该数整数位数为n,小数位数为m,即该数可表示为(Xn-n n,Xn-n n-1,…,Xn-n 2,Xn-n 1.Xm-m 1,Xm-m 2,…,Xm-m m);
转换为十进制的公式为:
- 整数部分
公式:(Y)10=SUM(Xn-n 1*M(n-n),Xn-n 2*M(n-n 1),…,Xn-n n*M(n-n n-1))
描述:各位数与对应基数的(n-1)次方的乘积之和。
- 小数部分
公式:(Y)10=SUM(Xm-m 1*M-1,Xm-m 2*M-2,…,Xm-m m*M-m)
描述:各位数与对应基数的(-m)次方的乘积之和。
例1:
二进制数101.01B转为十进制数,其结果为5.25D
计算方法:
整数部分:101B=1*2^(3-3) 0*2^(3-2) 1*2^(3-1)=1*20 0*21 1*22=1 0 4=5D
小数部分:0.01B=0*2^-1 1*2^-2=0 0.25=0.25D
合并整数与小数部分:101.01B=5D 0.25D=5.25D
例2:
将十六进制数1F9.05AH转换为十进制,结果为505.3515625D。
计算方法:
整数部分:1F9H=9*16^0 F*16^1 1*16^2=9 240 256=505D
小数部分:0.5AH=5*16^-1 A*16^-2=0.3125 0.0390625=0.3515625D
注:
整数部分从右往左的次方数依次为0,1,2,3,…,n-1,n;
小数部分从做往右的次方数依次为-1,-2,-3,…,-(m-1),-m。
转换为其他进制
十进制转换为二进制、四进制、八进制、十六进制。
假设一个数X(十进制表示为(X)10),该数整数部分为Xn,小数部分为Xm
假设我们需要转换为M进制。
- 整数部分
公式:(Y)M=…MOD(MOD(Xn/M))
描述:高位到低位(左往右)依次连续除以要转换的进制基数取余数,然后再倒序。
- 小数部分
公式:(Y)M= …TRUNC(TRUNC(Xm-(m-1)*M))
描述:高位到低位(左往右)连续乘以要转换的进制基数取整数,然后顺序排序,前面加上小数点。
最后再将整数部分和小数部分连接起来,即可得到需要转换的进制数
(Y)M=MOD(Xn-(n-1)/M),MOD(Xn-(n-2)/M),…,MOD(Xn/M).TRUNC(Xm-(m-1)*M),TRUNC(Xm-(m-2)*M),…,TRUNC(Xm-(m-m)*M)
例1:
将十进制数201.125D转换为二进制,其结果为11001001.001B。
计算方法:
整数部分:
201/2=100…1,余1
100/2=50….0,余0
50/2=25……0,余0
25/2=12…….1,余1
12/2=6……..0,余0
6/2=3……….1,余1
3/2=1……….1,余1
1/2=0……….1,余1,整数部分已归0,计算完毕
小数部分:
0.125*2=0.25…0,取整为0
0.25*2=0.5…….0,取整为0
0.5*2=1.0……….1,取整为1,小数部分已归0,计算完毕
连接整数和小数:
11001001.001B
最后,再附上一段PHP十进制转二进制代码(仅支持整数转换)
代码语言:javascript复制function Dec2Bin($dec) {
if (!is_int($dec)) return false;
$bin = '';
while ($dec>1) {
$bin .= $dec%2;
$dec = ($dec-$dec%2)/2;
}
return strrev($bin.$dec);
}
本文采用 「CC BY-NC-SA 4.0」创作共享协议,转载请标注以下信息:
原文出处:Yiiven https://cloud.tencent.com/developer/article/2193225