博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
内存地址空间与十六进制,为什么需要八进制和十六进制? 十六进制的意义何在?...
阅读量:6787 次
发布时间:2019-06-26

本文共 1126 字,大约阅读时间需要 3 分钟。

众所周知, 内存地址空间是用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)

参考:
十六进制

理解C指针: 一个内存地址对应着一个值

 

转载于:https://www.cnblogs.com/liuzhendong/archive/2011/10/17/2215632.html

你可能感兴趣的文章
bzoj1037生日聚会
查看>>
eclipse-->切换语言版本
查看>>
配置IIS服务器,APK文件下载
查看>>
2003应用池假死常见问题和解决方法
查看>>
使用javascript的日期函数
查看>>
c# : use xsd 校验 xml
查看>>
mybatis初接触
查看>>
没有测试的开发是多么的悲催哇
查看>>
awk的日志模块追加日期时间字段的方案
查看>>
[转]高级SQL注入:混淆和绕过
查看>>
System.IO.Path 文件名、路径、扩展名处理
查看>>
类的成员修饰符
查看>>
课堂训练
查看>>
HDU 5464:Clarke and problem
查看>>
Web服务器禁止range请求
查看>>
php编译GD库 JPEG Support
查看>>
【转】着色中的数学和物理原理
查看>>
overflow的使用
查看>>
Position Independent Code (PIC) in shared libraries on x64
查看>>
CNBLOG上几位.NET大牛的博客地址(转)
查看>>