delphi – 为什么当转换为整数时,真正的变体布尔变为-1?
我意识到人们不应该期望真正的布尔人在被转换为整数时变为1,纯粹是他们变为非0.
但是,结果会根据变量是变量(但是varBoolean)还是布尔值而变化. 考虑以下: I := Integer(true); 我现在1岁. 但… var I: Integer; V: Variant; begin V := true; I := Integer(V); end; 我现在是-1. 当然,如果在将生成的布尔值转换为整数之前将V转换为布尔值,则变为-1. 但我很好奇为什么会这样. 这是因为布尔值的存储方式(比如1位),当转换为整数时,Delphi执行转换,在将Variant转换为Integer时不会发生转换? 我只提出这个问题,因为如果你习惯于将一个真正的布尔值转换为1,那么在varType() – case中使用varInteger的varBoolean共享案例可能会很危险. 例如: case VarType(V) of varInteger,varBoolean: I := Integer(V); end; 不会像人们预期的那样表现. 解决方法
这种行为确实如预期的那样. varBoolean类型对应于VT_BOOL.这是
documented像这样:
你还说Delphi的布尔值存储为1位.事实并非如此.它们存储在一个字节,8位.我想关键点是VT_BOOL变体不包含Delphi布尔值. VT_BOOL变种是一个完全不同的野兽,最初来自VB. Raymond Chen在这里讨论了一下:BOOL vs. VARIANT_BOOL vs. BOOLEAN vs. bool. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |