二进制和16进制的知识

来源:互联网 发布:淘宝网购物女装t恤衫 编辑:程序博客网 时间:2024/05/20 22:38

为什么一位十六进制数对应四位二进制数?


就是简单的2^4=16么?总感觉没法理解这个东西。

二进制是满二进一,十六进制是满十六进一,原理跟十进制是相同的;
比如,9=1*2^3+0*2^2+0*2^1+1*2^0=9*16^0
那么二进制写为1001,十六进制写作9
类似的,15=1*2^3+1*2^2+1*2^1+1*2^0=15*16^0
那么二进制写为1111,十六进制写作F
2^4=16,十六进制的一位数需要二进制的四位数才能全部表示

16进制表示范围为0-15
四位2进制数表示的也是0-15

1111 = 15

(16进制,逢16进1)







内存地址是12位16进制数,那么对应的指针需要多少字节?
例如(对变量取址得到的):0x7fff5ced2e5c;
那么就是12个4位的2进制数,就是48位的2进制数,48/8 = 6,那就是6个字节可以表示48位的2进制数。但是我储存一个指针(利用sizeof求得)需要8字节,
为什么??
指针是8字节没问题,但另两个字节也是地址的组成部分,并无它用。可以这样想,在windows系统上,如果你对函数临时变量取值,很可能得到0x13ff58这样一个3位16进制数地址,那么剩下5个字节都做其它用了吗?
地址数值只有48位是表像,实际上它是64位的地址,这是当前的x86_64处理器硬件限制所致。因为目前面世的x86_64处理器的地址线只有48条,硬件要求传入的地址的48到63位必须与47位相同。因此有两段合法的地址空间,最直观的是0 - 0x00007fff ffffffff,另一段是0xffff8000 00000000 - 0xffffffff ffffffff。两段加在一起一共2^48 = 256TB,这就是当前处理器的寻址能力。但一般我们是见不到第二段地址的,因为操作系统一般使用低段地址,高段这部分需要你的机器至少有128TB以上的内存。
0 0
原创粉丝点击