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