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

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

 

  

版权声明:本文为onetrainee原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/onetrainee/p/12165810.html