C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
код на C++ в Delphi код, (B&0x80)? 1:0;
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 не корректно проинициализирована:

CODE

byte N = N%3;


и вообще в теле процедуры она не используется.

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 then

надо заменить на
CODE

if (B and $80) > 0 then

Вернуться в Вопросы программирования в C++Builder