看流星社区

 找回密码
 注册账号
查看: 5568|回复: 0

易语言各种数据类型在内存中的形态

[复制链接]

该用户从未签到

发表于 2016-7-30 08:09:41 | 显示全部楼层 |阅读模式
数据类型
大小(字节)
结构说明
字节型
1
这个没必要说明…
短整数型
2这个没必要说明…
整数型
4这个没必要说明…
长整数型
8这个没必要说明…
小数型
4这个没必要说明…
双精度小数型
8这个没必要说明…
文本型
4易语言文本型变量其实并未直接储存文本数据,而是储存了一个指针(这就是说它的大小是4字节的原因),这个指针指向的内存储存了文本数据.
字节集
4

字节集型变量其实并未直接储存字节集数据,而是储存了一个指针(这就是说它的大小是4字节的原因),这个指针指向的内存储存了字节集数据.

字节集数据的结构:

1、  一个恒定为数值1的整数;(4字节)

2、  一个整数记录数据的长度;(4字节)

3、  字节数据;

也就是说,要获得真正的字节集数据地址,要这样写:

读数值 (取地址 (字节集变量)) + 8   ‘加8是偏移8字节

数组
4

数组型变量其实并未直接储存数组数据,而是储存了一个指针(这就是说它的大小是4字节的原因) ,这个指针指向的内存储存了数组数据.

数组数据的结构:

1、  一个整数记录该数组的维数;(4字节)

2、  对应数目的整数值顺序记录对应维的成员数目;

3、  数组数据;

也就是说,要获得真正的数组数据地址,要这样写:

读数值 (取地址 (数组变量)) + 读数值(读数值 (取地址(数组变量))) × 4 + 4

复合数据类型 (包括自定义数据类型和类)

4

也是保存了指针,这个指针指向的内存储存了数据。

数据的结构:

按顺序排列所有成员,注意任何成员如果数据尺寸小于4个字节,都会被自动对齐到4个字节。

如以下复合类型:

成员1:字节型

成员2:短整数型

成员3:整数型

则整个复合类型所占用的空间为 12 个字节,

成员1地址:读数值(取地址 (复合变量))

成员2地址:读数值(取地址 (复合变量))+4

成员3地址:读数值(取地址 (复合变量))+8



首先是基本数据类型
我们要把所有的数据类型转换成字节集;之后将字节集转换成比特位。之后,大家就一目了然了。

首先是字节型不需要解释。
短整数型   对应C++类型:SHORT
短整数可以容纳-32768到32767之间的数值。占用2个字节。
那么这2个字节到底装了什么呢?
我们拿短整数2676作为例子。
转换为字节集{116,10}
我们将字节集转换为比特位(01110100 00001010)
这时,把比特位的前后8个比特位调换位置,即得到(00001010 01110100)
短整数最高位(即最左边)是0,表示他是一个正数,最高位是1,表示他是一个负数
是负数的话,需要将其他为取反(即是1的位全部变成0,是0的为全部变成1)
然后计算出其他位比特位的十进制,并添加正负号。

整数型   对应C++类型:INT
整数型可以容纳-2147483648到2147483647之间的数值,占4个字节。
正数拿675535434作为例子
转换为字节集{74,218,67,40}
转换为比特位(01001010 11011010 01000011 00101000)
我们把比特位按照八个一组,颠倒位置(4-3-2-1变成1-2-3-4),得到(00101000 01000011 11011010 01001010)
一下面可以按照短整数对比特位的处理进行处理:
整数最高位是0,表示数字是正数,最高位是1,表示是负数
是负数的话,需要将其他为取反。然后计算出其他为的十进制值,并添加正负号
长整数型    对应C++类型:INT64
长整数型可容纳-9223372036854775808到9223372036854775807,占8个字节,其数据可能会变成双精度小数型,即溢出数据。
基本计算过程类似整数型。
小数型    对应C++类型:FLOAT
小数型可容纳4个字节的浮点小数。
拿数字3.1415926535为例
转换字节集{219,15,73,64}
转换为比特位(11011011 00001111 01001001 01000000)
我们把比特位按照八个一组,颠倒位置,得到(01000000 01001001 00001111 11011011)
小数的最高位是0表示数字是正数,最高位是1,表示是负数。
我们取出高2位到高9位(即最左边第二位到最左边第九位),即(10000000),转换为十进制为129
把的出来的数值加上-127:即129 + -127 = 2,我们把这个数叫做小数位指数,简称(指数)
取出高10位至底1位(即最左边第十位至最右面的第一位),(10010010 00011111 1011011-)
然后在取出数据的最高位添加一个1
通过指数,我们知道,小数点在二进制的第2位,我们添加一个虚拟的小数点(小数点是不存在的)

即得出11.0010010000111111011011
整数部分=11[2]=3[10]
小数部分=0010010000111111011011[2]=0.1415926535
(注意,如果整数部分你是用求次方的方法计算出来的话,小数部分也是用求次方的方法,只不过最高位的次方数是-1,高2位是-2,以此类推)
整数于小数相加,既得最后结果。
双精度小数型    对应C++类型:DOUBLE
双精度小数型可容纳8个字节
其于小数型的区别就是:
小数型的指数为8个比特位
双精度小数型的指数为11个比特位
小数型的数字位为23个比特位
双精度小数型的数字位为52位
计算方法一样。
逻辑型    对应C++类型:BYTE
逻辑型值占4个字节。。。。我在想,有必要吗????
浪费内存啊
逻辑型只能为“真”或者“假”
真=整数型的1
假=整数型的0
这样,大家就知道为什么逻辑型占4个字节了吧
日期时间型    对应C++类型:DATE
日期时间型用作记录日期及时间,尺寸为8个字节
实际上呢,日期时间型是双精度小数型 ,当数据是[1899年12月30日]的时候,将日期时间型转换为字节集再转换为双精度小数时,双精度小数等于0
数据中,每加减1日,双精度小数也加减1(一天=双精度小数1)
文本型
文本型一个内存指针,这个指针存放着连续数据,连续数据的最后一个字节为{0};如果这个指针是0,表示空文本
字节集型
字节集一个内存指针,这个指针存放着连续数据,数据的第一个字节永远是整数1,数据的第二个字节是字节集的数据长度,第三个字节以后直到刚刚取出的长度之间的数据,就是实际数据;如果指针为0,则表示字节集为0
复合数据类型(即自定义数据类型)
复合数据类型是一个内存指针,这个指针一定不是0;这个指针指向的内存区域是顺序排列的数据类型成员。如果任何一个成员所占用的内存空间小宇4个字节,则会自动对齐到4个字节。(文本或字节集存储的是其指针)
比如以下复合类型:字节A,短整数B,整数C,双精度小数D,其中A和B都被对齐到4字节
A占用4字节
B占用4字节
C占用4字节
D占用8字节
子程序指针型
子程序指针型即整数型
数组
数组类型的前四个字节是整数型,表示数组的维数;接下来是与维数相同个数的整数型数据,表示每一维的维数。
然后是数据本身。
数据本身有以下三种情况:
1、字节集或文本:储存的是数据指针
2、基本数据类型、菜单数据或窗口单元(这些数据是易语言库中自己处理,数据解释的复杂度更高),储存数据本身。
3、复合数据类型:储存的是与复合数据类型结构相同的指针数组。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-19 19:56

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表