Delphi: 布尔类型中的XOR和<>有什么区别?

3

这两种方式有什么区别:

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;

我曾以为<>是Delphi中的一种替代xor运算符...但很快意识到那只是ABool1 != ABool2,我真傻。 - undefined
1个回答

9
不,它们完全相同。(生成的代码可能不同,但行为永远不会有任何差异。至于性能,这个问题非常不重要。)

是的,我明白这并不是一个紧迫的问题。我只是想知道,因为 ABool1 = ABool2 和 Abool1 AND ABool2 是一样的,如果你只看与和异或的真值表,你可能不会认为它们有相等和相反的运算符,就像 = 和 <> 一样。我只是需要一点确定性。 - undefined
4
AND 和 = 不会产生相同的结果。 - undefined
9
(false and false) = false,(false = false) = true - undefined
@Peter:David是对的。与=相对应的逻辑运算符是等价,<=>。 - undefined
7
如果您的Boolean变量是通过将一个值不为0或1的整数强制转换而来,则可能存在细微差别。(当您进行类型转换时,您告诉编译器您知道自己在做什么,编译器会相信您。)这样,您可能会得到两个非零但不相等的变量。如果您要对整数进行类型转换,应使用LongBoolWordBoolByteBool,而不是Boolean。Delphi假设Boolean只有两个可能的二进制值;但对于其他类型,它不会做出相同的假设。 - undefined
Rob,你应该把你的评论发布为一个答案。 :) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接