关于逻辑操作符,为什么1 in [1..768]的值会等于False(50分)

  • 主题发起人 主题发起人 GrassDragon
  • 开始时间 开始时间
G

GrassDragon

Unregistered / Unconfirmed
GUEST, unregistred user!
var
i,Max: integer;
r: result;
begin
i:=5;
max:=768;
b:=(i in [1..max])
//按道理b应该等于True,而实际运行情况却=False
//但是我把max:=767或max:=769,返回值都正确.
//这是为什么,如何解决?
end;
 
如果max=256或max=1024,也不能返回正确值.很奇怪呀!
 
Max只要是256的整数倍都是为False
 
Max只要是256的整数倍都是为False ,这是为什么呢,如何解决呢.
如果是这样,那岂非in这个操作符就没有什么用处了.
 
有这事?呵呵,奇怪啊
 
In 操作 最大只能[0..255] 枚举型长度最大256个
 
对,枚举型长度最大256(byte)。
如果你用 b:=(i in [1..768]),编译时编译器就会告诉你范围超标,而
你用的是 b:=(i in [1..max]),此时编译器就会自动将 max 转换为 byte:
b:=(i in [1..byte(max)]),byte(256)=byte(768)=byte(1024)=0,由此你就知道结论了。
 
原来如此,多谢提醒.
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
763
import
I
后退
顶部