(众所周知),内存地址是由十六进制来表示的,为什么呢?
这里涉及一些进制转换的知识,比如:
- 1011 0010转换成十六进制是从右到左,将二进制数每四位分为一组。如果最左边的组不足四位,则在左侧用零填充,直到达到四位。然后将每一组四位二进制数转换成相应的十六进制数,可以使用下表进行转换:
| 二进制 | 十六进制 |
| ------ | -------- |
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | A |
| 1011 | B |
| 1100 | C |
| 1101 | D |
| 1110 | E |
| 1111 | F | - 通过上表可以看出,将1011 0010分成两组,1011对应B,0010对应2,因此得到的十六进制数为B2。
- 为什么不用八进制来表示呢,那我们来看看1011 0010转换成八进制是多少,要讲二进制转换成八进制,首先从左到右,将二进制数每三位分为一组。如果最左边的组不足三位,则在左侧用零填充,直到其达到三位,将每个三位二进制数转换成相应的八进制数,可以使用下表进行转换:
-
| 二进制 | 八进制 |
| ------ | ------ |
| 000 | 0 |
| 001 | 1 |
| 010 | 2 |
| 011 | 3 |
| 100 | 4 |
| 101 | 5 |
| 110 | 6 |
| 111 | 7 | -
通过上表我们可以把1011 0010分为三组,010 110 010,分别对应2 6 2,因此1011 0010的八进制数为262,很明显比十六进制占用内存空间要大,因此八进制没有十六进制占用内存小
-
那么十进制呢,二进制1011 0010转成十进制,首先从右往左,每一位上的数乘以2的m次方之和,m从0开始,依次+1,因此我们可以得出十进制为178,同理。
-
小小总结一下,内存地址由十六进制来表示是因为十六进制占用存储空间最小,最方便,最直接。
那么内存地址为什么只显示八位数字呢,比如00FAF76C,这种数字
-
首先,这串数字是随机的,由计算机随机分配,毫无规律
-
我们可以通过指针的知识来解释,为了方便访问内存中内容,系统给每个内存单元(字节)一个编号,该编号成为地址,也就是指针,因此,笼统点说,地址就是指针,指针就是地址,指针内存一般占四个字节,64位操作系统是八个字节,所以说,定义一个变量,系统给他分配的地址就是四个字节,而一个字节等于八位,因此四字节等于32位,这个位都是二进制数,根据上面的二进制转成十六进制,可以知道,每四位二进制数转成一位十六进制数,最终结果就是32/4得到八位十六进制数