• 内存地址空间与十六进制,为什么需要八进制和十六进制? 十六进制的意义何在?


    众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在?

    编程中,我们常用的还是10进制.毕竟C/C++是高级语言。   

    比如:int a = 100,b = 99;   

    不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决 问题。但二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:   

    0000 0000 0000 0000 0110 0100   

    面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。

    不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。
     

    十六进制的意义:
    1.用于计算机领域的一种重要的数制   

    2.对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。   

    3.十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数。

    十六进制的表示:
    C语言、Shell、Python语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。

    然后再说内存:

    一个内存地址存着一个对应的值, 内存就相当于(addr,val)的大hash表,c语句的语义基本就是改变hash值。

    如 int i = 3; 
    假设 i的内存地址为 0x8049320 ,那么这句话的语义是0x8049320 = 3,经过i = 3后,i为(0x8049320,3)

    int b = i;
    假设 b的内存地址为 0x8049324 ,那么这句话的语义是0x8049324 = i对应的val = 3,此时b为(0x8049324,3)


    参考:

    十六进制
    http://baike.baidu.com/view/230306.htm

    理解C指针: 一个内存地址对应着一个值
    http://www.cppblog.com/hex108/archive/2011/06/18/124234.html

  • 相关阅读:
    Altium Designer如何导出SMT贴片机用的坐标文件
    STM8S003设计注意事项
    Keil4打开KEIL5未响应卡死的问题
    STM32 adc 多通道采集相互串扰问题解决
    STM32 RS485 和串口 只能接收不能发送问题解决
    AD中元器件报警的处理——器件高度报警
    QT乱码解决办法《转》
    STM32下载失败,st-link v2 在线下载sw模式检测不到
    docker部署普罗米修斯监控
    进程管理常用命令
  • 原文地址:https://www.cnblogs.com/liuzhendong/p/2215632.html
Copyright © 2020-2023  润新知