编译器产生的obj文件种存储的是16进制数,也是二进制代码的原因。因产生二进制数太多,看起来很不方便,且容易出错,故生成16进制数。一个16进制数,它就是4位二进制数。

CPU最终执行的是经编译器和链接器生产的可执行文件。

编译器产生的是源程序的机器码。例如:0x7f 0x86 0xae 0xc4。

0x是16进制的标示符,它表示后面紧跟的数是16进制表示。

这时候你就疑惑了,不是说机器码是二进制吗?这都是16进制是什么意思啊?

7f 86 ae c4 是16进制数,转为二进制数是01111111 10000110 10101110 11000100

其实16进制和二进制是等价的,可以很方便的转换。

你看下面这个二进制数

0100 1100 1010 1111 这是一个16位(这个16和16进制没有关系,指的是由16个二进制数组成)的二
进制数,为什么要每4位用空格分开呢?你看4个二进制位,能有多少种不同的组合呢?

用一个值代表一个状态,那么4个二进制位可以代表 2^4=16 种状态,是排列组合的知识。

16种组合:0000,0001,0010,0011,0100,0101,0110,0111,1000,,1001,1010,1011,1100,1101,1110,1111

是不是2的4次方,16种?如果我把这16种不同的组合分别用:0123456789abcdef来表示。

那上面的二进制数我就可以把它表示为:0100=4 1100=c 1010=a 1111=f

那是不是上面一长串的二进制数就表示成了4caf?如果想把4caf转化为二进制,那只需要把每位的16进制数转化为相应的4位二进制数即可。是不是很方便转换?所以说16进制和二进制是等价的。

只不过显示在屏幕上一串二进制的话,人类看起来很不方便。一是很容易看错,二是在屏幕上显示的长度也过长。所以计算机上的二进制数一般都是用16进制来表示,以方便人们的理解。

当然也有三位二进制数一组的八进制表示形式,原因也是相同的。那为什么不用人们更容易理解和习惯的十进制来表示呢?因为十进制和二进制没有直观的对应。一个16进制数,它就是4位二进制数。每4位二进制数就对应一个16进制数。但二进制和十进制之间没有这样的直观转化方式。习惯和熟悉之后,你很容易把二进制转化为16进制。也很容易把16进制转换为二进制,它们之间的位数转换也是固定的,直观的。两个16进制数,就是8位二进制。三个16进制数就是12位二进制数。4个16进制数就是16位二进制数。这种转换是非常简单和直观的。相对来说,十进制和二进制之间的转换就没有这么简单和直观。所以这就是为什么计算机中的二进制数常用16进制或八进制来表示。

发布了1 篇原创文章 · 获赞 0 · 访问量 5

猜你喜欢

转载自blog.csdn.net/qq_43300709/article/details/105157164
今日推荐