zoukankan      html  css  js  c++  java
  • 二进制中的数学换算

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html

    二进制中的数学换算

    接触二进制安全也比较久了,对于数值的换算应该很熟练,但是似乎一直找不到技巧,总是被各种单位、十进制/十六进制 换算苦恼。

    如果给出一些时间可以让自己换算正确,但是在二进制学习中大量换算,这无疑会花费很多精力。

    因此,就尝试写该篇博客,尝试找到如何快速换算的思路。

     

    一、基本的单位换算:

      Bit、字节、字、双字、四字、KB、MB、GB:

         

    二、二进制与十六进制的思考方式:

      十六进制与十进制最大的不同是:按位思考

      我们在进行十六进制计算时,不要按照十进制的思考模式去思考每一位的权值,而是直接拆分成二进制位数,转去对位个数的运算(四整数倍的换算)

      举个例子:

      1)说起字节,我们如何通过十六进制来表示?

      正确思考方式:一个字节,八个bit位,十进制角度为 2^8, 8/4 = 2 , 故两个十六进制就可以表示。

      2)说起1GB,我们如何通过十六进制来表示?

      正确思考方式:1GB,2^30,同理,30/4 = 7·····2,故 0x 2^2 * [000,0000]  即 0x4000,0000。

      3)说起32位,其最大的值如何来表示?

      正确思考方式:2^32 , 32/4 = 8,即 0x1,0000,0000 , 一般从零开始计算,则为 [0,0xFFFFFFFF]。

     

    三、使用二进制、十进制还是十六进制:

      如果认真分析完(二),会发现其实三者无关紧要。

      二进制(x个位) -> 十进制(2^x) -> 十六进制(x/4),这条逻辑很清晰。

      自己感觉难点存在两个,一个是在十进制中对2的幂运算,二是对于十六进制除以4的操作,这两个很容易忘记如何计算。

     

    四、如何通过十六进制快速判断是多少字节多少位:

      理解上面所讲的,这很好判断,比如一个寄存器中的值为 0x0019FFCC,其两个十六进制表示一个字节(8个bit),因此我们直接看位数为4字节,4*8 = 32 位,因此这个寄存器为32位寄存器。

      所以这思路是先通过十六进制,位数除二换算成字节,字节再乘八换算成比特位得到处理位数。

     

    五、总结

      之后,如果再提到1GB,那么先想是 2 的多少位,之后再来分析到底是求十进制还是十六进制,十进制直接2的幂运算,十六进制直接除以4即可。

      如果直接以16进制显示,则其位数除以2划分成字节,一字节对应8位,同时字、双字、四字之类的同理可以直接在十六进制基础上划分即可,如果感觉划不过来通过字节来进行划分。

      主要是反应要快,快速得到结果

     

      

  • 相关阅读:
    [转]中英文停止词表(stopword)
    [转]Memcached常用命令及使用说明
    Java导出excel并下载功能
    Java List 汉字进行排序
    Tengine笔记3:Nginx的反向代理和健康状态检查
    Tengine笔记2:通过IP、域名、端口实现虚拟主机
    Tengine笔记1:安装Tengine和Tengine说明
    Linux学习笔记6-Linux根目录下各个目录的作用
    Linux学习笔记5-搭建内网Yum源
    Python学习笔记10-Python MysqlHelper ,MySql 辅助类
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12165810.html
Copyright © 2011-2022 走看看