如何在Delphi中比较两个数字的相等性?

pau*_*ohr 1 c delphi if-statement

我正在将代码从C转换为Delphi,但我仍然停留在这段代码的最后一行:

 BOOL is_match = FALSE;
 unsigned int temp_val;
 unsigned int prev_val = 0;

 is_match = (temp_val == val);
Run Code Online (Sandbox Code Playgroud)

我只能转换这么多:

 var
  is_match: boolean;
  temp_val: cardinal;
  prev_val: cardinal;
 begin
  is_match := false;
  prev_val := 0;
  is_match := ????
 end;
Run Code Online (Sandbox Code Playgroud)

我如何填写最后一个作业?

And*_*and 12

is_match := temp_val = val;

无论如何,我希望上面的代码只是真实代码的一小段摘录,因为temp_val在你比较它时是未定义的val.


Dav*_*nan 7

C中的等式比较运算符是==.在Delphi中,等效运算符是=.

所以你需要使用这段代码:

is_match := temp_val=val;
Run Code Online (Sandbox Code Playgroud)

有趣的是,顺便说一句,C等值运算符导致了一个非常经典且难以发现的错误.它是这样的:

if (x=0)
    DoSomething();
Run Code Online (Sandbox Code Playgroud)

这里发生的是=赋值运算符,因此x分配了一个值,0然后进行真值测试.并返回false,因此DoSomething()永远不会执行.我相信这种潜在的混淆是Pascal选择:=用于任务的原因之一.

  • 你在睡觉吗?:) (8认同)
  • @Andreas是的,花了74秒,所以我显然是在休息日. (2认同)