Guest |
Отправлено: 06.12.2005, 22:34 |
|
Не зарегистрирован
|
Как ниже приведенный код будет выглядеть на паскале
CODE |
void Roll(byte &B )
{
byte N = N%3;
byte B;
t = (B&0x80)? 1:0;
B = (B<<1)+t;
}
| |
|
** exp |
Отправлено: 07.12.2005, 13:38 |
|
Не зарегистрирован
|
начнем с того, что в нем ошибка. Переменная B объявлена дважды. Исправьте. |
|
Doga |
Отправлено: 07.12.2005, 14:02 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Мало того, переменная byte N не корректно проинициализирована:
и вообще в теле процедуры она не используется.
|
|
Doga |
Отправлено: 07.12.2005, 16:18 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Насколько я понимаю это должно выглядеть так:
CODE |
procedure Roll(var B: byte);
var
t: byte;
begin
if B and $80 then
t := 1
else
t := 0;
B := (B shl 1) + t;
end;
|
P.S. Корректный результат был бы только для 0 <= B <= 127. Хотя величина 0х80 уже выходит за эти рамки. Мне кажется тут что то неправильно с логикой, или В должно иметь тип int. Правда и тут возможно переполнение...
Отредактировано Doga — 07/12/2005, 17:08
|
|
Guest |
Отправлено: 08.12.2005, 00:29 |
|
Не зарегистрирован
|
При компиляции следующей строчки if B and $80 then выдается сообщение об ошибки “Type mismatch”, может это потому что я пишу скрипт в Inno Setup 5, а не в delphi |
|
Doga |
Отправлено: 08.12.2005, 14:13 |
|
Мастер участка
Группа: Участник
Сообщений: 575
|
Прошу прощения, ошибка в коде.
Строку
надо заменить на
CODE |
if (B and $80) > 0 then
|
|
|