zoukankan      html  css  js  c++  java
  • 进制转换的方法原理

     

    进制这事儿,说到底就是位值原理,即:

    同一个数字,放在不同的数位上,代表不同大小的数
    例如:十进制中,百位上的1表示100,十位上的1表示10.

    十进制之中,每个数都可以被拆开:
    123=1×100+2×10+3×1
    9876=9×1000+8×100+7×10+6×1

    这个事情先搞清爽,然后我们就可以为拓展进制做准备了:
    试回答这个问题:为啥相应的数位是1000、100、10、1?为啥不是4、3、2、1?

    答:满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10

    这样我们就知道了,对10进制,从低位到高位,依次要乘以10^0(10的0次方,下同),10^1,10^2,10^3……

    下面我们开始换进制玩儿:
    进制换成 进制
    也就是把10换成2
    那么我们得到:
    对2进制,从低位到高位,依次要乘以2^0,2^1,2^2,2^3……
    也就是1、2、4、8、……

    因此原来十进制咱们叫 十位、百位、千位……
    现在二进制其实是 二位、四位、八位……

    这样我们就能做十进制换二进制了:
    比如:二进制数1011=1×2^3+0×2^2+1×2^1+1×2^0=1×8+0×4+1×2+1×1=8+2+1=11

    (由于二进制中非零的数只有1,所以其实等同于:

    个位有数就加1,二位有数就加2,四位有数就加4……)

    接下来我们进行十进制往二进制的转换
    比较小的数,直接通过拆分就可以转换回去
    比如13,我们数一数,1、2、4、8、16……,唔,不能包含16了,那就只能包含8。 13-8=5,5当中有4,5-4=1
    好啦,我们知道13=8+4+1
    接着把她对应回相应位置去,8是从低往高数的第4位,4是从低往高数的第3位,1是从低往高数的第1位
    于是13=二进制数1101

    然后就多练习这个,反复练,让自己熟悉这个感觉:
    17=16+1=二进制10001
    19=16+2+1=二进制10011
    30=16+8+4+2=二进制11110
    ……

    比较熟悉之后就可以看看高级的短除法化二进制了(不要偷懒哦!先去把前面的练熟!):
    粗鄙地来做的话,现在你按照书上说的短除法来试试,会发现它和你凑数得到的结果刚好是一样的,好神奇~
    以后就按这个做吧!

    想要知道其中的道理的话:
    (1)一个二进制数末尾是1,意味着一定是……+1,前面的每个数都是2的倍数,只有最后的+1不是
    所以一个二进制数末尾是1,意味着它对应的十进制数除以2一定是余1的。
    所以第一次除以2之后的余数,就是转换结果中的最后一位。
    (2)如果一个二进制数从低往高第2位是1,我们希望把它转换为(1)的情况,那么我们把这个二进制数的末尾抹掉。
    抹掉尾巴的二进制数,和原来的二进制数相比,每个数都往低位错了1位,相当于除以2.
    末尾的尾巴丢掉了,相当于我们把余数丢掉了。
    而这个除以2的步骤,刚好是(1)当中判断末尾是不是1的步骤,所以我们刚好可以继续做下去。
    对这个抹掉了尾巴的二进制数(十进制来说就是原数除以二之后的商),我们继续(1)的做法,把它除以2,看余数。
    ……
    如此继续下去,就可以得到短除法的结论了。
     
    来源:知乎
     
     
  • 相关阅读:
    Python解释器安装
    有钱就放余额宝的人,这个习惯恐怕要改一改!
    这么详细的存储基础知识,你不看看? 会后悔的!
    超全!华为交换机端口vlan详解~
    华为:鸿蒙绝不是安卓换皮!!!
    VS Code 真的会一统江湖吗?
    用户与安全 -(1)Linux用户及组管理
    运维必看!这个技能薪水28.8万,工资竟然还只是零花钱....
    原来 Linux 日志文件系统是这样工作的~
    干货长文:Linux 文件系统与持久性内存介绍
  • 原文地址:https://www.cnblogs.com/generator/p/10700965.html
Copyright © 2011-2022 走看看