内存0.1---内存里数据的表示形式以及进制转换

Posted yulianggo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存0.1---内存里数据的表示形式以及进制转换相关的知识,希望对你有一定的参考价值。

操作系统的位数与内存的关系: 

32位操作系统是指系统的寻址空间是2的32次方,即4G,也就是说32位操作系统只支持最大4G的内存,64位操作系统寻址空间理论上为2的64次方,即17179869184G,目前最大支持128G,主流主板最大容量为16G。

 内存的概念:

内存存储的是二进制数,可以将内存抽象为开关。一个开关对应两应两种状态,一种状态对应1,一种状态对应0。把八个开关放到一间房子里面,这间房子就相当于一个字节。房间的门牌号相当于地址。无数个房间堆叠且,形成了摩天大厦,大厦就相当于内存。

 10这个十进制数字占用4个房间,有32个开关。

 

存储单位的转换:

8bit=1Byte

1024Byte=1KByte

1024KByte=1MByte

1024MByte=1GByte

1024GByte=1TByte

 

进制的转换:

 

二级制: 1+1=10   (逢二进一)

八进制:1+7=10    (逢八进一)    沟通二进制与16进制

十进制:9+1=10    (逢十进一)

十六进制:F+1=10  (逢16进一)   内存地址用16进制表示

 

 

十进制-》二进制 :  倒除法,余数逆序

示例:10(十进制)-》1010(二进制)

       2|      10                   

            2 |     5               余数为0

                 2|      2          余数为1

                      2|     1      余数为0

                           | 0       余数为1

 

 

 

二进制-》十进制

当前的数字乘以2的位数次方,最后相加

例如:1010(二进制)

0*2^0+1*2^1+0*2^2+1*2^3=10(十进制)

 

 

八进制-》二进制

【一转三位】八进制的一位转换为二进制读的3位,转换时用十进制转换

456(八进制)-》100 101 110 (二进制)

二进制-》八进制

【三位一取】三个二进制数相当于一位八进制,从低位开始取,高位不够加0

101 110(二进制)-》56(八进制)

 

 

十六机制-》二级制

【一转四位】十六机制的以为相当于二进制的四位,转换时用十进制转换

FED->1111 1110 1101(二进制)

 

 

二进制-》十六进制:

【四位一取】四位二进制相当于一位十六进制,从低位开始取,高位不足补0

1010 1111 1101(二进制)-》AFD(十六进制)

 

 

 内存里数据的表示形式及原因:

计算机存储数据的流程:先开辟内存空间,再存储数据。即算机以字节为单位开辟空间。

1010这个数占4个字节,前面填充28个0,内存存放的形式是:0000000000000000000000000001010

     存放的最高位表示符号:0表示正数  1表示负数

 

  +1:00000000000000000000000000000001

  -1:10000000000000000000000000000001

      10000000000000000000000000000010

 

若-1由 10000000000000000000000000000001表示

那-1+1=-2,明显不对,因此-1不能由10000000000000000000000000000001表示

 

引出原码,反码,补码的概念

 

原码:规定了字节数,写明了符号位,得到了数据的原码

反码:正数的反码是其自己,负数的反码是其原码的符号位不变,其他位取反

补码:正数的补码是其自己,负数的补码是其反码加1

 

计算机中的所有数都是以补码的形式存储的

 

-1的原码:10000000000000000000000000000001

-1的反码:1111111111111111111111111111111110

-1的补码:1111111111111111111111111111111111

 

+1的原码=反码=补码=00000000000000000000000000000001

 

因此+1+(-1)就是:

  +1:00000000000000000000000000000001

  -1:11111111111111111111111111111111111

      00000000000000000000000000000000

 

结果很显然就是0,因此用补码的形式表示所有数字是可行的

以上是关于内存0.1---内存里数据的表示形式以及进制转换的主要内容,如果未能解决你的问题,请参考以下文章

数据在内存中的存储(二进制形式存储)

不同变量在内存中的存在形式(以16进制表示)

浮点型数据在内存中的存储

大数据JAVA基础第二天

浮点数如何在内存中存储

C语言学习 -- 整型与浮点型在内存中的存储