C 如何在Delphi中比较两个数字是否相等?
我正在将一段代码从C转换为Delphi,但我仍停留在代码的最后一行:C 如何在Delphi中比较两个数字是否相等?,c,delphi,if-statement,C,Delphi,If Statement,我正在将一段代码从C转换为Delphi,但我仍停留在代码的最后一行: BOOL is_match = FALSE; unsigned int temp_val; unsigned int prev_val = 0; is_match = (temp_val == val); is_match := temp_val=val; 我只能转换这么多: var is_match: boolean; temp_val: cardinal; prev_val: cardinal;
BOOL is_match = FALSE;
unsigned int temp_val;
unsigned int prev_val = 0;
is_match = (temp_val == val);
is_match := temp_val=val;
我只能转换这么多:
var
is_match: boolean;
temp_val: cardinal;
prev_val: cardinal;
begin
is_match := false;
prev_val := 0;
is_match := ????
end;
如何填写上一份作业?
是否匹配:=temp\u val=val代码>
无论如何,我希望上面的代码只是真实代码的一小部分,因为当您将其与val
进行比较时,temp\u val
是未定义的:=temp\u val=val代码>
无论如何,我希望上面的代码只是真实代码的一小部分,因为当您将其与val
进行比较时,temp\u val
是未定义的。在Delphi中,等效运算符为=
因此,您需要使用以下代码:
BOOL is_match = FALSE;
unsigned int temp_val;
unsigned int prev_val = 0;
is_match = (temp_val == val);
is_match := temp_val=val;
有趣的是,作为旁白,C相等运算符导致了一个非常经典且难以发现的错误。事情是这样的:
if (x=0)
DoSomething();
这里发生的情况是=
是赋值运算符,因此x
被赋值为0
,然后进行真值测试。它返回false,因此永远不会执行DoSomething()
。我相信这种潜在的混淆是Pascal选择使用:=
赋值的原因之一。C中的相等比较运算符是=
。在Delphi中,等效运算符为=
因此,您需要使用以下代码:
BOOL is_match = FALSE;
unsigned int temp_val;
unsigned int prev_val = 0;
is_match = (temp_val == val);
is_match := temp_val=val;
有趣的是,作为旁白,C相等运算符导致了一个非常经典且难以发现的错误。事情是这样的:
if (x=0)
DoSomething();
这里发生的情况是=
是赋值运算符,因此x
被赋值为0
,然后进行真值测试。它返回false,因此永远不会执行DoSomething()
。我相信这种潜在的混淆是Pascal选择使用:=
进行赋值的原因之一。另一个原因是操作符==
看起来很滑稽。事实上,在纯数学中,你不会写‘如果a==0,那么特征值…’。另一方面,在数学中,定义一个新的量时,经常使用“:=”。@Andreas是的,它花了74秒,所以我显然是在休息。C用“==”表示相等,几乎乞求开发人员把事情搞砸,(我已经做了很多次了,我记不清了)。Delphi没有这个问题,但是弥补了这个问题,没有警告“myObject.create”而不是所需的“myObject:=TmyObject.create”:(myObject.create总是导致立即繁荣。这很容易修复。如果(x=0)可能更令人反感。另一个原因是运算符==
看起来很有趣。事实上,在纯数学中,你不会写“如果a==0,那么特征值…”。另一方面,在数学中,当你定义一个新的量时,经常使用“:=”。@Andreas是的,它花了74秒,所以我显然是在休息日。C用“==”表示相等,almosDelphi不存在这个问题,但它没有警告“myObject.create”,而不是所需的“myObject:=TmyObject.create:”:((myObject.create总是导致立即繁荣。这很容易修复。if(x=0)可能更令人讨厌。