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位,同时字、双字、四字之类的同理可以直接在十六进制基础上划分即可,如果感觉划不过来通过字节来进行划分。

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

     

      

  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/onetrainee/p/12165810.html
Copyright © 2011-2022 走看看