目录

【飞郁2022新课程】04 - 十六进制

同学同学,你怎么..不开心?

进制太烦了,我算的乱七八糟

来来来,听完我这节课,你还是不说不懂的话,我不保证不打死你???…

拓展内容:十进制转其他进制

十进制数12 如何转成二进制?其实上节课我们已经讲过了,我们来复习一下

我们把数值都放到个位,看看他怎么进位即可

我们12全放在个位是不行的,二进制只有1和0,那么我们需要进位,

所以

12/2 = 6 余0

代表我们有6个2进位到十位,余0代表个位为0,我们暂且可以写成60,当然2进制不能有6,所以我们继续进位

6/2 = 3 余 0

代表我们有3个2进位到百位 ,余0代表十位为0,我们暂且写成300,但是2进制不能有3,所以我们继续进位

3/2 = 1 余 1

代表我们有1个2进位到千位 ,余1代表百位为1,我们可以写成1100,里面已经没有除了1和0之前其他的数值,那么我们得到了最终结果1100

那么,我们来一点有难度的:

十进制123 转成 9进制等于多少? 用同样的方法计算一下

146,怎么样会算吗?

十六进制

计算机底层是2进制,我们常用是10进制,其实我们掌握这两种就够用了,

但是我们这节课来学习一下16进制。

为什么会牵扯出16进制呢?16进制实际上是2进制的简写方式。

为什么要简写呢?

大家试想一下,如果屏幕上面全都是0和1一串数值,让你去看或则记忆,会是一种上面样的情况

例如

11010100100101000101111101001010101

疯掉了吧?

所以我们必须要有一种简写的方式来帮助我们观看

聪明的人类是这样设计的

4位2进制最小是0000,最大是1111,也就是 0 - 15,那么我们就可以用一位的16进制来表示4位的2进制了,16进制的16的符号分别是0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

例如 1101 我直接可以用 0xD 表示了

11011111 就是0xDF 是不是看起来舒服多了,看起来不那么累了

以后我们看到的二进制,无论是VS的反汇编窗口还是IDA,OD,CE等工具里,全部都是以16进制的形式体现出来的

也就是二进制的简写方式

写16进制的时候前面加个0x

例如 0x10

字节与位

我们说4位2进制可以用一位16进制表示

那么8位2进制就是两位16进制表示

8位也是我们编程应用的最小单位,叫做1字节

1字节8位的最大值:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/56b5858b62dd8f3da90dc8146d7be02c9e2f5a98.png@942w_134h_progressive.png1

1字节8位的最小值:

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/b9b7f3b92345d482f2c4074e4446a217caa97c42.png@942w_129h_progressive.png2

十六进制转换

例:

16进制转10进制 0x4a = ?

答案:74

例:

10进制转16进制 99=? 1277=?

答案:99=0x63

1277=7916+d= d+F16+41616=0x4FD

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/245281251953e395d6e40816ff595a47f3c0b23d.png@942w_575h_progressive.png3

进制符号化_拓展

我们来看下十进制的定义 0123456789 10个符号 逢10进1

注意是说的10个符号,这10个符号可以不是0123456789

如果是)!@#¥%……&*( 这10个符号 你还会计算吗

% + …… = !! 能看出来吗?

打乱这种就可以达到加密的效果

例:

9进制 9个符号分别为543672189 (分别对应012345678 )

现在5已经代表0了…

那么176+829=?

答案:

176 和 829 分别对应 643和 758

643+758= 1512

然后转换回现在的定义 4 2 4 3

https://cdn.jsdelivr.net/gh/xinqinew/pic@main/img/d0399803cce2cf739cb6e194561d8d9bd6bb26d9.png@942w_413h_progressive.png4

2.学员问答

3.习题+考核

课上练习题

•说出5种生活中进制使用的实例

•将十进制的256//1024//4095//65,536//1000转换为16进制

•将16进制的0x64//0x3E8//0x2710//0x666转换为10进制

•如果12345678分别代表8进制的01234567,那么243+367=?

•16进制的0xAB+0xCD等于多少?将结果转换为10进制等于多少

•将16进制的0x579B转换为2进制

•将2进制的10110111011110分别转换为16进制和10进制

•将二进制的1011111010010100转化为16进制以及十进制,要求写出过程或原理

•计算0xD0DF1C+0x56789A的值

•将十进制的6666转化为9进制(防止你们用计算器)

•如果! @ # $ % ^ 分别对应6进制的012345计算%$%+@^@

•分别用16进制表示32位游戏和64位游戏的最大内存是多少,他们相差的多么?是二倍关系么?

•想一想生活中特殊进制的实例,以及他们的进位关系

•根据任鸟飞老师的讲解和你们的理解,想一想我们为什么要学习进制,为什么要做进制转换练习

•继续计算!将10进制的123,转化成2进制.想一想有几种算法,他们的特点是什么?

选做题

•10进制下有一个两位数AB,在7进制下恰好为BA。请问满足条件的两位数有几个?

•一个16进制的算式如下LN+LM=NMN,如果LMN各不相同,请问他们分别是那几个数字?

课上练习题答案

•说出5种生活中进制使用的实例

•将十进制的256//1024//4095//65,536//666转换为16进制

•0x100//0x400//0xFFF//0x10000//0x29A

•将16进制的0x64//0x3E8//0x2710//0x666转换为10进制

•100//1000//10000//1638

•如果12345678分别代表8进制的01234567,那么243+367=?

•521

•16进制的0xAB*0xCD等于多少?将结果转换为10进制等于多少

•0x178//376

•将16进制的0x579B转换为2进制

•0101 0111 1001 1011

•讲2进制的10110111011110分别转换为16进制和10进制

•0x2DDE//11742

•将二进制的1011111010010100转化为16进制以及十进制,要求写出过程或原理

1011111010010100按照4位一组进行排列

1011 1110 1001 0100

每4位对应一个16进制的数字,转换之后为

B E 9 4

0xBE94=11161616+141616+916+4=48,788

错误做法,直接将2进制按照常规算法转成10进制,然后再转16进制

这样会麻烦很多,工作量很大

•计算0xD0DF1C+0x56789A的值

16进制计算,逢16进1,直接相加即可

0xD0DF1C+0x56789A = 12757B6

逐位相加

D+5=12(00000)

0+6=6(0000)

D+7=14(000)

F+8=17(00)

1+9=A(0)

C+A=16

16+A0+1700+14000+60000+1200000= 12757B6

不合理做法,先转成10进制,相加之后再转化回来

•将十进制的6666转化为9进制(防止你们用计算器)

做法除以9取余数倒叙排列

6666/9=740……6

740/9=82……2

82/9=9……1

9/9=1……0

1/9=0……1

最终结果为10126

•如果! @ # $ % ^ 分别对应6进制的012345计算%$%+@^@

首先将%$%+@^@转化为012345 然后再进行计算,算完记得转化回来

%$%+@^@=434+151=1025=@!#^

•分别用16进制表示32位游戏和64位游戏的最大内存是多少,他们相差的多么?是二倍关系么?

32位是0-FFFFFFFF

64位是0-FFFFFFFF FFFFFFFF

相差的很多,应该是1 0000 0000倍而不是2倍

•想一想生活中特殊进制的实例,以及他们的进位关系

比如时间进制,秒和分是60进制,小时是24进制,天是30或者31进制,月是12进制

•根据任鸟飞老师的讲解和你们的理解,想一想我们为什么要学习进制,为什么要做进制转换练习

因为16进制是逆向的核心进制,在数据分析的过程中我们需要对16进制和10进制的关系非常敏感.而其他的进制也可能作为加密的数据出现在分析过程中,了解进制转换的过程,并不是说我们每次都要去手动计算,而是为了了解原理,看透本质

•继续计算!将10进制的123,转化成2进制.想一想有几种算法,他们的特点是什么?

两种算法,第一种直接用除以2的方式得出2进制为111 1011

第二种先将10进制转化为16进制0x7B,再将0x7B中的两个数字分别转化为0111和1011,最终结果为1111011

选做题1答案

•步骤1:先思考第一个问题, 7进制下BA在10进制下是多少? 这个问题是最基本的进制换算, 7进制下BA就是7×B+A, 这就是10进制下的值。

•步骤2:再思考第二个问题, A和B需要满足什么条件? 首先判断A和B的范围, A和B一定小于7。 由相等关系有7×B+A=10×A+B, 化简即3×A=2×B。

•步骤3:综合上述几个问题, 考虑原题目的答案。 根据步骤2的结果, B一定是3的整数倍, 结合小于7的条件,B只能取3或6, 此时对应的A是2或4, 所以满足条件的两位数是23或46

选做题2答案

一个16进制的算式如下LN+LM=NMN,如果LMN各不相同,请问他们分别是那几个数字?

答案为L=8

M=0

N=1

也就是0x81+0x80=0x101

原理,N和M相加等于N,说明M为0,并且个位没有进位

L+L=NM,说明进位了,并且十位为0,进位只能是进1,所以N一定为1

L+L=0x10,L必然等于0x8