经常看到类似于如下代码:function Succeeded(Res: HResult): Boolean;
begin
Result := Res and $80000000 = 0;
end;function Failed(Res: HResult): Boolean;
begin
Result := Res and $80000000 <> 0;
end;不明白为什么不能写成这样:
function Succeeded(Res: HResult): Boolean;
begin
Result := Res = 0;
end;function Failed(Res: HResult): Boolean;
begin
Result := Res <> 0;
end;明明可以直接比较,为什么非要AND一下? 谁给解释一下?
begin
Result := Res and $80000000 = 0;
end;function Failed(Res: HResult): Boolean;
begin
Result := Res and $80000000 <> 0;
end;不明白为什么不能写成这样:
function Succeeded(Res: HResult): Boolean;
begin
Result := Res = 0;
end;function Failed(Res: HResult): Boolean;
begin
Result := Res <> 0;
end;明明可以直接比较,为什么非要AND一下? 谁给解释一下?
表示 关注 res的最高位等于0,res其它位不是0也没关系Res and $80000000 <> 0;
表示 关注 res的最高位等于1,res其它位是不是0都没关系
这样写,关注点可以更准确:某一位(其它位不管是什么都没关系)res为0x81或0x71 都满足 res<>0
但是 res and $80 <> 0,则只有前者才满足
$71 and $80 也是 = 0的啊 :-)