计算机内存地址为啥要用16进制数来表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机内存地址为啥要用16进制数来表示相关的知识,希望对你有一定的参考价值。

请各位帮忙解答一下

因为在计算机内部,二进制数据转换为十六进制数据最直接、最快捷,占用存储空间最小。

在数据传输和存储中主存储器的存储单元以字节为单位,每个存储单元都有一个地址与其对应,假定主存储器的容量为n,则该主存储器就有n个存储单元(既n个字节的存储空间),其地址编号为:0,1,2,……,n-1。

把主存空间的地址编号称为主存储器的绝对地址,与绝对地址对应的主存空间称为物理地址空间。

扩展资料

16进制数机制

进位制/位置计数法为一种记数方式,可以用有限的数字符号代表所有的数值。可使用数字符号的数目称为基数(en:radix)或底数,基数为n,即可称n进位制,简称n进制。现在最常用的是十进制,通常使用10个阿拉伯数字0-9进行记数。

对于任何一个数,我们可以用不同的进位制来表示。比如:十进数57(10),可以用二进制表示为111001(2),也可以用五进制表示为212(5),也可以用八进制表示为71(8)、用十六进制表示为39(16),所代表的数值都是一样的。

参考资料来源:百度百科-有效内存地址

参考资料来源:百度百科-十六进制数

参考技术A 1.因为16进制和二进制转换很容易看出来。
2.一位就是4个二进制位,与或运算一眼就能看出来。
3.十进制转换如果要置位,要运算还得转换回去,因为最根本的还是二进制的。
4.另外内存地址用16进制也算是约定俗成,如果地址也用十进制你可能分不清哪个是地址哪个是值。

内存地址的作用:

在8086的实模式下,把某一段寄存器左移4位,然后与地址ADDR相加后被直接送到内存总线上,这个相加后的地址就是内存单元的物理地址,而程序中的这个地址就叫逻辑地址(或叫虚地址)。在80386的保护模式下,这个逻辑地址不是被直接送到内存总线,而是被送到内存管理单元(MMU)。MMU由一个或一组芯片组成,其功能是把逻辑地址映射为物理地址,即进行地址转换。
参考技术B 2进制数据太长了,对其进行计算需要花费不少时间,而16进制恰恰解决了这个问题,因为进制越大,数的表达长度越短.这样就缩短了计算时间. 参考技术C 在计算机内部,二进制数据转换为 十六进制数据最直接、最快捷,占用存储空间最小。本回答被提问者采纳

在计算机中,为啥负数要用补码的形式表示呢?(图文并茂版)

原码、反码、补码形式的介绍

符号位

       •在标准计算机中规定,把内存最高位作为符号位,且最高位为0表示正数,为1表示负数

原码

       •原码:一种计算机对数字的二进制表示方法,并带有符号位(最高位为0表示正数,为1表示负数)

00000000 00000000 00000000 000001117 的原码
如 10000000 00000000 00000000 00000111-7 的原码

注意:

       •0的原码有两种表示方法,+0,-0都为0的原码

00000000 00000000 00000000 000000000 的原码
如 10000000 00000000 00000000 000000000 的原码

反码

       •正数的原码、补码、反码是相同的!!!

00000000 00000000 00000000 000001117 的原码
如 00000000 00000000 00000000 000001117 的反码
如 00000000 00000000 00000000 000001117 的补码

       •将二进制数按位取反即可得到负数的反码

10000000 00000000 00000000 00000111-7 的原码
如 11111111 11111111 11111111 11111000-7 的反码

       •只有负数的反码为按位取反,正数的反码与原码相同!!!

补码

       •负数的补码为:将负数的二进制按位取反后得到反码,再反码+1,即可得到负数的补码
       •正数的补码与原码相同!!!

10000000 00000000 00000000 00000111-7 的原码

如 11111111 11111111 11111111 11111000-7 的反码

如 11111111 11111111 11111111 11111001-7 的补码

       •通过上述对原码、反码、补码的了解,接下来我们将解释为啥在计算机中,负数要以补码的形式表示,首先我们需要了解算数中的概念

什么是模数

In mathematics, modular arithmetic is a system of arithmetic for integers, where numbers “wrap around” upon reaching a certain value—the modulus (plural moduli).

模数的理解

       •模数是指一个计量系统的计数范围,例如时钟,水表盘等等,计算机本质上就是一个大型计算器,它也有一个计量的范围,即为计算机也存在模数
       •如:时钟的计量范围是0~11,即模数为12
       •如:64位的计算机的计量的范围是2^64
,即模数为2^64
       •模数是计算器产生‘溢出’的量,它的值在计算器上表示不出来,计算器上只能表示出模的余数,例如:10的余数有0、1、2、3、4、5、6、7、8、9

补数

       •假设当前时针指向十点,而当前准确时间是八点,将时间调整正确的方法有以下两种:
              •一:逆时针拨动两个小时,即:10-2=8
              •二:顺时针拨动十个小时,即:10+10=12+8=8
       •在以模为12的系统中,减2和加10的效果是一样的,因此,凡是减2的运算都可以用加9来代替,对模数12来说,10与2互为补数(二者相加等于模)
       •有上述可得出结论,即在一个有模的计量系统中,减一个数,等于加上它的补数,从而达到将减法运算转换成加法运算的目的!!!

补码原理

       •计算机上的补码就是算数里的补数,将减法化为加法运算
       •设我们计算机是4位的,则其计量范围的模是:2^4 = 16,所以表示的范围为-8~7
       •举例如下:
       •以上计算机为例,请计算5 - 3的值,将题中的减法运算转换成加法运算,因此需将5 -3 转换成加法计算:

 # 上述理论可得,减一个数等于加上它的补数,所以
 5 - 3
 # 等价于 
 5 + (16 - 3)   // 算术运算单元将减法转化为加法
 # 用二进制表示上述式子则为:
 0101 + (10000 - 0011)
 # 等价于
 0101 + ((1 + 1111) - 0011)   # 10000=1111+1
 # 等价于
 0101 + (1 + (1111 - 0011))   # 结合律,将后两个数结合
 # 等价于
 0101 + (1 + 1100)   # 1111-0011 运算可得 1100
 # 等价于
 0101 + 1101
 # 所以从上述可得:
 -3 = 1101
 # 即 `-3` 在计算机中的二进制表示为 `1101`
 # 最后一步 0101 + 1101 等于
 10010

       •从上述题目可得,我们的计算机是 4 位的,计算结果为5位,第一位“溢出”了,所以我们只保存了 4 位,即 0010,而当计算机去读取这个值时,这正是我们所期望的 2
       •上述就是计算机中减法的基本运算方法,将减法转换成加法,进行运算操作!!!!

以上是关于计算机内存地址为啥要用16进制数来表示的主要内容,如果未能解决你的问题,请参考以下文章

关于内存地址和内存空间的理解(转)

Object.toString()方法返回16进制地址

内存地址和内存空间

打印变量地址-0x%08x

C语言中 int 类型在内存中占4个字节 double类型在内存中占8个字节 为啥地址编译出来都是6个16进制数字

Golang指针