【问题标题】:Delphi: XOR vs <> for booleansDelphi:布尔值的 XOR 与 <>
【发布时间】:2011-01-27 23:13:43
【问题描述】:

有什么区别:

procedure InequalityMsg(ABool1, ABool2 : Boolean);
begin
  if ABool1 <> ABool2 then
    ShowMessage('Yeah, they''re not the same');
end;

procedure InequalityMsg(ABool1, ABool2 : Boolean);
begin
  if ABool1 XOR ABool2 then
    ShowMessage('Yeah, they''re not the same');
end;

【问题讨论】:

  • 我原以为 &lt;&gt; 是 Delphi 中的替代 xor 运算符...但很快意识到这只是 ABool1 != ABool2,我很傻。

标签: delphi boolean xor inequality


【解决方案1】:

不,它们完全相同。 (好吧,生成的代码可能会有所不同,但行为永远不会显示出任何差异。而且,随着性能的发展,这个问题非常不重要。)

【讨论】:

  • 是的,我认为这并不是一个紧迫的问题。我只是想知道,因为 ABool1 = ABool2 与 Abool1 AND ABool2 相同,如果您只是查看 and 和 xor 的真值表,您不会认为它们具有相等和相反的运算符,例如 = 和 。我只是需要一点点关闭。
  • AND 和 = 不会给出相同的结果。
  • (假和假)=假,(假=假)=真
  • @Peter:大卫是对的。对应于 = 的逻辑运算符是等价,.
  • 如果您的 Boolean 变量通过类型转换一个不具有 0 或 1 值的整数来获取其值,则可能存在细微差别。(当您进行类型转换时,您告诉编译器您知道自己在做什么,并且它信任您。)您最终可能会得到两个也不相等的非零变量。如果您要对整数进行类型转换,则应使用LongBoolWordBoolByteBool 而不是Boolean。 Delphi 假设Boolean 只有两个可能的二进制值;它不会对其他类型做出相同的假设。
猜你喜欢
  • 2017-04-08
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
相关资源
最近更新 更多