二进制和16进制的知识

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


就是简单的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)







例如(对变量取址得到的):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以上的内存。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值