APP下载

数据在计算机内存中的存储形式及实验验证

2016-02-11吴艳婷方贤进

关键词:存储单元简体中文字符

吴艳婷,方贤进

(安徽理工大学计算机科学与工程学院,安徽淮南232001)

数据在计算机内存中的存储形式及实验验证

吴艳婷,方贤进

(安徽理工大学计算机科学与工程学院,安徽淮南232001)

现实世界中的任何数据,包括数值型数据、非数值型数据,在计算机内存中的存储与处理都是以二进制形式进行的。弄清楚各种类型数据在计算机内的存储与处理形式,对计算机专业学生了解计算机系统底层的工作原理和数据处理机制具有重要的意义。本文设计了几个实验对数值型数据,(包括正、负整数,浮点型与双精度型实数,非数值型数据)的编码以及存储方式进行了详细研究,并通过C语言进行了验证。

数据;内存;存储单元;小端存储

1 数值型数据在计算机中的存储

1.1 整数在计算机中的存储方式

在字长为32位的系统中,整数的范围为-232~232-1即-2 147 483 648~+2 147 483 647。整数的原码用其二进制形式表示,其最高位为符号位,正数的符号位为0,负数的符号位为1。例如在字长为32位的计算机系统中,整数+70和-70的原码分别为

整型数在计算机内存中存储形式为其补码[1]的形式。正数的补码等于其原码,负数的补码等于除符号位之外各位求反再加1。例如在字长为32位的计算机系统中,+70和-70的补码分别为

可设计C语言程序验证正整数与负整数在计算机内存中的存储形式,具体如下所示。

由此可见,正整数在内存中是以其原码形式存储的,而负整数是以其补码形式存储的,其在内存中存储都是占用4个存储单元。

1.2 小数在计算机内存中的存储

实数可以以浮点型(float)和双精度型(double)形式存储,后者存储与计算时精度要高于前者。在IntelCPU架构的系统中,存放方式以小端模式(Little Endian[2],即低字节存在低地址中,每个存储单元存储一个字节),那么浮点型实数在内存中是如何存储的?目前所有的C/C++编译器都是采用IEEE所制定的标准浮点格式,即二进制科学表示法,将一个实数S写成形如S=M*2^N的格式,其主要由3部分构成:符号位+阶码(N)+尾数(M)。对于float型实数用32个bit存储,其中符号位1位,阶码8位,尾数23位,如表1所示;对于double型实数用64个bit存储,符号位1位,阶码11位,尾数52位,如表2所示。

表1 Float类型数据在内存中的存储形式(占用4个存储单元)

表2 Double类型数据在内存中的存储形式(占用8个存储单元)

阶码:采用移码表示,对于float型数据其规定偏置量为127,阶码有正有负,对于8位二进制,则其表示范围为-128~127;对于double型规定偏置量为1 023,其表示范围为-1 024~1 023。比如对于float型数据,如果阶码的真实值为2,则加上127后为129,其阶码表示形式为1000 0001。

尾数:有效数字位,即部分二进制位(小数点后面的二进制位),因为规定M的整数部分恒为1,所以这个1就不进行存储了。

例如,推算float型实数125.5在计算机内存中的存储形式。将125.5转换为二进制形式,表示为1111101.1,由于规定尾数的整数部分恒为1,则表示为1.1111011*2^6,阶码为6,加上127为133,则表示为10000101,而对于尾数将整数部分1去掉,为1111011,在其后面补0使其位数达到23位,则为11110110000000000000000。125.5的二进制表示形式为

0 10000101 11110110000000000000000,其在内存中占用4个存储单元的存储形式,如表3所示。

表3 一个float型数据在内存中的存储形式示例

由上分析可知,float型数据最大表示范围为1.11111111111111111111111*2^127=3.4*10^38设计C语言程序验证一个浮点小数在计算机内存中的存储形式。

用Linux系统中的gcc编译器编译后的运行结果为:

对于double型实数在计算机内存中存储形式的分析与float型类似,只不过其阶码为11位,偏置量为1 023,尾数为52位。

2 非数值型数据在计算机内存中的存储

2.1 ASCII字符

无论是标准ASCII字符,还是扩展ASCII字符,都是以1个字节的编码,因此它们在计算机中的存储占用1个存储单元。例如字符‘A’在存储时占用1个存储单元,其值为0x41;字符‘a’存储时占用1个存储单元,其值为0x61;字符‘$’存储时占用1个存储单元,其值为0x24。

2.2 汉字

通过查“GB2312简体中文编码表”[3]可知,该表里对各种标点符号、日文片假名、特殊符号、制表符、希腊字母、俄文字母、汉字等进行了编码,每个符号的编码为16个bits。例如,通过查“GB2312简体中文编码表”可知字符“㈥”的编码为0xA2EA,具体见下面GB2312简体中文编码表的一部分(表4)。

表4 GB2312简体中文编码部分表

那么对GB2312简体中文编码表中的字符,它们在计算机中是如何存储的呢。例如汉字“安”的GB2312编码为0xb0b2,其低字节为0xb0,那么有0xb0的原码=(1011 0000)2,0xb0的补码为[1011 0000]补=[1011 0000]反+1=(1100 1111)2+1= (1101 0000)2,其真值为十进制数-80。而真值为-80在32位字长的计算机系统内存中占用4个存储单元(即4个字节),其存储形式如下,

即汉字“安”的编码的低字节在内存中存储形式为0xffffb0。用同样的方法分析汉字“安”的编码的高字节在内存中的存储形式为0xffffb2,其总共占用了8个存储单元(8个字节)。可设计如下C语言程序进行验证。

实际上,任何字符都像汉字那样进行了编码,而无论其编码是GB2312,还是UNICODE,UTF16编码,对它们在内存中存储格式的分析都可参照此方法进行。

3 总结

本文总结了现实世界中的数据,包括正整数、负数、浮点小数、双精度小数、非数值型数据,在计算机系统内存中的存储形式及占用的存储单元数量。设计了相应的实验验证了在Intel架构的计算机系统中数据在计算机内存中是以Little-endian方式进行存储的。这些计算机基础知识对计算机专业的学生了解计算机系统底层工作原理和数据处理机制具有一定的意义。

[1]W IKIPEDIA.Two'scomplement[EB/OL].(2016-09-22)[2016-09-26] .https://en.wikipedia.org/wiki/Two%27s_complement.

[2]BAIDU.Little-endian[EB/OL].(2016-06-19)[2016-09-26].http: //baike.baidu.com/view/2368412.htm.

[3]BAIDU.GB2312简体中文编码表[EB/OL].(2016-09-20) [2016-09-26].http://www.knowsky.com/resource/gb2312tbl.htm.

Storage Form for Data in theMemory of Computer System and Experimental Verification

WU Yan-ting,FANG Xian-jin
(School of Computer Science and Engineering,Anhui University of Science and Technology,Huainan,Anhui 232001,China)

Any data in real world,including digital data and non-digital data,are normally stored and processed in the form of binary in the computer system.For the student majoring in computer specialty,the storage and processing form of various data in thememory of computer system isuseful to understand the operating principle and data processingmechanism in the underlying layer of computer system.In this paper,several experiments are designed to investigate the form of encoding and storage for positive and negative integer,float and double real number and other non-digital data,which are tested and verified by C language programs.

data;memory;memory cell;little-endian

TP306

A

1007-4260(2016)04-0152-03

时间:2017-1-3 17:19

http://www.cnki.net/kcms/detail/34.1150.N.20170103.1719.039.html

2016-04-15

安徽省信息安全专业综合改革试点项目(ZY201418)。

吴艳婷,女,安徽长丰人,安徽理工大学助理实验师,研究方向为计算机类课程实验项目设计。E-mail:ytwu@aust.edu.cn

10.13757/j.cnki.cn34-1150/n.2016.04.039

猜你喜欢

存储单元简体中文字符
一种28 nm工艺下抗单粒子翻转SRAM的12T存储单元设计
一种新型密集堆垛式仓储系统设计
DDE Server
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
浮点类型有效位数计算与应用分析
HBM电子称与西门子S7-200系列PLC自由口通讯
Sws AspWebServer
数据在计算机内存中的存储形式及实验验证