Delphi OR ++差值

bnl4lu3b  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(113)

不久前,我使用了TFileStream.Create(Source,fmOpenRead + fmShareDenyNone),我被告知应该使用or而不是+
我在谷歌上搜索过,但也许我搜索错了方向。我还看了.Create的源代码。
然后我决定,我应该简单地试着看看有什么区别。

var
  Mode : Word;
  Mode2 : Word;

begin

  Mode := 1 or 16;  // $0001 or $0010
  Mode2 := 1 + 16;  // $0001 + $0010

  ShowMessage(IntToStr(Mode)+' '+IntToStr(Mode2));

end;

我以为会有不同,但我可能做错了。

****or+有什么区别,例如TFileStream.Create
更新

我刚刚意识到我做错了。

Mode := 1 or 1;

vs

Mode := 1 + 1;

有区别,第一个是1,第二个是2。
如果有人能告诉我一些文档,说明它是如何/为什么这样工作的,那就太好了。
Mode := 2 or 6 vs Mode2 := 6 or 6,第一个是6,第二个是6。

yptwkmov

yptwkmov1#

老实说,在这种情况下,它不应该有什么不同。如果使用+,只要每个值只有一位,并且您不会多次使用任何值,则二进制位字段不会导致任何溢出。
但是为了安全起见,当您想要执行逻辑或按位操作时,最好使用逻辑运算符--这就是您在这里所做的。
所以推荐使用or

相关问题