Delphi中枚举类型内存的格式问题 ( 积分: 100 )

  • 主题发起人 主题发起人 answerhyh
  • 开始时间 开始时间
A

answerhyh

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi精要52页中,讲枚举类型的存储格式和编译指令$Z有关……也就是说,枚举变量其实就是一个整数,
迷惑,如果枚举对象中有多个有序值,一个整数怎么存得下呢?
 
摘自PASCAL精要

枚举类型有多种内部表示法。缺省时,Delphi 用8位表示法;如果有多于256个不同的值,则用16位表示法。还有一种32位表示法,需要与C、C++库兼容时会用到。使用$Z 编译指令可改变缺省设置,请求更多位的表示法。
 
type
utype=(u1,u2,u3,u4)

....
var
i:integer;
uvt:utype;
....
for uvt:=u1 to u4 do
begin
i:=integer(uvt);
showmessage(inttostr(i));
end;
 
1001001001001,这样存,每个有序值占一位,256 / 8 = 16 BYTE。
明白了吗?
 
谢谢,各位
 
枚举其实就是一个有序数的集合
用整数按位表示节约空间
处理速度快
 
枚举类型其实就相当于一个整型常量:
utype=(u1,u2,u3,u4)
这里 u1=0,u2=1,u3=2,u4=4
一个字节(8位)的表示范围是 0..255,所以多于256个时要用2个字节(16位)表示拉

pascal精要中文电子版,chm格式,欢迎大家继续下载:
http://ufo2003.ys168.com 的“杂类”下面
 
只有ufo说得对!
其他人不要乱解释,误人!

可以
utype = (u1=168,u2,u3,u4,u5)等方式!
 
楼主可能把枚举和集合类型搞混了.
枚举实际上就是整数(数学概念),为了记忆方便,为每个整数(数学概念)取了个名字而已.
 
帮你顶,接个分
 
后退
顶部