2012-04-03 3 views
1

Я преобразования кода из C в Delphi, но я застрял на последней строке этого кода:Как сравнить два числа для равенства в Delphi?

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

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; 

Как я заполнить последнее задание?

ответ

11

is_match := temp_val = val;

Во всяком случае, я надеюсь, что приведенный выше код является лишь небольшой отрывок из реального кода, потому что temp_val не определен в то время, если сравнить его с val.

+0

Спасибо, отлично работает .. :) – paulohr

+0

@paulohr - тогда вы должны принять этот ответ. –

7

Оператор сравнения равенства в C - ==. В Delphi эквивалентный оператор равен =.

Таким образом, вы должны использовать этот код:

is_match := temp_val=val; 

Интересно, как в сторону, оператор C равенство приводит к очень классический и трудно обнаружить ошибку. Это выглядит следующим образом:

if (x=0) 
    DoSomething(); 

Что здесь происходит, что = является оператор присваивания и так x присваивается значение 0, которое затем истина проверена. И это возвращает false, и поэтому DoSomething() никогда не выполняется. Я считаю, что эта потенциальная путаница является одной из причин, почему Паскаль решил использовать := для назначения.

+8

Вы спали? :) –

+1

Другая причина в том, что оператор '==' выглядит забавным. Действительно, в чистой математике вы не пишете «если a == 0, то собственные значения ...». С другой стороны, в математике: = часто используется, когда вы определяете новое количество. –

+2

@Andreas Да, это заняло 74 секунды, так что я явно в выходной день. –

Смежные вопросы