Delphi 10.4.2版本Boolean运算结果与预期不符问题求助
问题根因说明
你混淆了Delphi中And运算符的两种使用场景,运行结果符合语法规则,并非版本BUG:
- 当
And两侧操作数为整数类型时,执行按位与运算:逐位比对两个数的二进制位,仅当对应位都为1时结果位才为1。
1的二进制为0001,14的二进制为1110,逐位与运算后结果为0000,对应十进制数值0,和你实际运行结果一致。 - 你认知中的“逻辑与运算”要求操作数为布尔类型:仅当两侧表达式都为
True时结果为True。如果要得到你预期的1,需要先把整数转为布尔表达式判断,再做逻辑与运算,最后用Ord()函数将布尔值转为整数(Delphi中Ord(True)固定返回1,Ord(False)固定返回0)。
修正后代码示例
procedure TForm1.Button1Click(Sender: TObject); var j,k, m: integer; begin j := 1; m := 14; // 逻辑与运算后转整数,得到预期结果1 k := Ord((j <> 0) And (m <> 0)); end;
内容的提问来源于stack exchange,提问作者John Barrat
相关产品推荐
相关产品推荐

