c++十六进制转十进制_十进制与二进制、八进制、十六进制互转

一.十进制与二进制互转

  首先理解十进制如何转二进制:将十进制数据除以2直到商为0,然后将余数从下往上排序连接,即可得到该数字的二进制数。

666a69e08cb235ed03944cf9b29a0215.png

如:整数13

13/2=6余1

6/2=3余0

3/2=1余1

1/2=0余1

取13余数,倒序连接。所以13转化二制为1101

可以用转化工具测试https://tool.lu/hexconvert/

理解十进制如何转换为二进制算法,那我们用PHP代码实现一下

1.

echo decbin(13)

输出结果是1101,这种方法特别简单,但实现原理你知道么?你不知道。。。

你不知道自己写写不就知道了么

$tenChangetwoFun = function ($num = 0){    if($num < 2)    {        return $num;    }    $twoArr = [];    $shang = $num / 2;    $yushu = $num % 2;    array_unshift($twoArr, $yushu);    while ($shang)    {        $yushu = $shang % 2;        $shang = intval($shang / 2);        array_unshift($twoArr, $yushu);    }    return implode('', $twoArr);};echo $tenChangetwoFun(15);

知道了十进制转二进制了,我们来聊一下二进制转化为十进制

解释一下,解释过程非常重要,要仔细看:

从最低位(最右)算起,位上的数字乘以本位的权重,权重就是2的第几位的位数减一次方。比如第1位:2^(1-1)=1,第2位2^(2-1)=2,以此类推,二进制1101,换算十进制1*2^(1-1)+0*2^(2-1)+1*2^(3-1)+1*2^(4-1)=1+0+4+8=13

用代码实现一下:

echo bindec(1101);

这段代码是不是很简单,虽然简单,但我们也要知道它实现的原理,我们用php代码实现一下:

$twoChangeTenFun = function ($twonum){    $twonum = (string)$twonum;    $len = strlen($twonum);    $twonum = strrev($twonum);    if($len < 1)    {        return 0;    }    $total = 0;    for ($i = 0; $i< $len; $i++)    {        $total += $twonum[$i]*pow(2,$i);    }    return $total;};echo $twoChangeTenFun(1101);

以上是十进制与二进制互转,接下来讲一下十进制与八进制互转

二.十进制转八进制

十进制转八进制跟十进制转二进制原理一样,如图:

05269b88d7619be1bbf38597b4007090.png

如:整数130

130/8=16余2

16/8=2余0

2/8=0余2

取130的余数,倒序连接,得出202

理解十进制转八进制算法,我们用php代码实现一下

echo decoct(130);

得出结果为202;这段代码是不是也很简单,我们理解一下它的实现原理,用php代码实现一下:

$tenChangeeightFun = function ($num = 0){    if($num < 8)    {        return $num;    }    $eightArr = [];    $shang = $num / 8;    $yushu = $num % 8;    array_unshift($eightArr, $yushu);    while ($shang)    {        $yushu = $shang % 8;        $shang = intval($shang / 8);        array_unshift($eightArr, $yushu);    }    return implode('', $eightArr);};echo $tenChangeeightFun(130);

惊不惊讶,刺不刺激,是不是跟上面二进制与十进制代码转化一样,对!就是一样的,可以用一套方法,传不同参数就行了。

知道十进制怎么转八进制,来看一下八进制转十进制呢,跟二进制转十进制一样,从最低位(最右)算起,位上的数字乘以本位的权重,权重就是8的第几位的位数减一次方。比如第1位:8^(1-1)=1,第2位8^(2-1)=2,以此类推,八进制202,换算十进制2*8^(1-1)+0*8^(2-1)+2*8^(3-1)=2+0+128=130

最简单代码:

echo octdec(202);

我们在用最复杂的代码实现一下,知道它的实现原理

$eightChangeTenFun = function ($eightnum){    $eightnum = (string)$eightnum;    $len = strlen($eightnum);    $eightnum = strrev($eightnum);    if($len < 1)    {        return 0;    }    $total = 0;    for ($i = 0; $i< $len; $i++)    {        $total += $eightnum[$i]*pow(8,$i);    }    return $total;};echo $eightChangeTenFun(202);

这段代码跟二进制转十进制一样。通过这两个转换,那十进制转十六进制与十六进制转十进制就不详细说明了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值