Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Целый тип 8 байт [D7, NT4, 2000, XP]


Страницы:   1 2

Влад ©   (2007-01-02 16:53:00) 

Как создать целый тип диапазоном от 0 до 2^64-1 (на 8 байт)?
Будут ли с ним корректно работать операции xor, shl, shr, mod, div, +-  и т.д.?


Sha   (2007-01-03 00:52:00) [1]

> palva ©
Кстати, ничто не мешает написать свое деление по образцу Борланда с минимальными изменениями.


Sha   (2007-01-03 00:42:00) [2]

> palva ©   (03.01.07 00:35) [33]
ага,
а деление не работает не только из-за расширения знакового разряда,
там и команды разные.


Sha   (2007-01-03 00:35:00) [3]

Вот самая страшная тайна масонов:
i mod 8 = i and 7


palva   (2007-01-03 00:35:00) [4]

Sha ©   (03.01.07 00:05) [30]
Да, точно. Умножение тоже работает.


Sha   (2007-01-03 00:22:00) [5]

> Влад   (03.01.07 00:15) [31]
а основание у mod какое? :)


Влад   (2007-01-03 00:15:00) [6]

а mod чем не деление?


Sha   (2007-01-03 00:05:00) [7]

> palva ©   (02.01.07 23:54) [27]

Сложение, вычитание и умножение для знаковых и беззнаковых
выполняется при помощи одних и тех же машинных команд,
а делить ему скорее всего и не надо, т.к. в алгоритмах шифрования
деление обычно не используется.


Влад   (2007-01-02 23:57:00) [8]

palva, большое спасибо. Теперь хоть понял, что не работает.


palva   (2007-01-02 23:56:00) [9]

Пропустил точку с запятой:
l, h: LongWord;


palva   (2007-01-02 23:54:00) [10]

> Как создать целый тип диапазоном от 0 до 2^64-1 (на 8 байт)?
Тип не создают, тип определяют, для вашего случая нужно определить запись, например так:

type
 TMyType = record
   l, h: LongWord
 end;

Потом реализовать функции, которые производят над этой записью арифметические операции.

> Будут ли с ним корректно работать операции xor, shl, shr, mod, div, +-  и т.д.?

Естественно, не будут. Эти операции применимы к целым числам а не к записям. int64 вам тоже не подойдет.

Если будете использовать int64, тогда будут правильно работать +, -, сдвиги и логические операции. Умножение и деление будут работать неправильно.

Пример:

{$APPTYPE CONSOLE}
uses SysUtils;
var
 ii: Int64;
begin
 ii := $8000000000000000;
 ii := ii div 2; // результат неправильный, поскольку комплиятор
                  // считает это число отрицательнлым.
 WriteLn(IntToHex(ii, 16)); // C000000000000000
 ii := ii SHR 2; // а здесь работает правильно
 WriteLn(IntToHex(ii, 16)); // 3000000000000000
 ReadLn
end.


Если в этом примере заменить Int64 на UInt64, то на BDS выводятся нули в обоих случаях. На D7 попробовать не могу, но там, насколько я когда-то пробовал UInt64 работает идентично Int64.


Sha   (2007-01-02 23:32:00) [11]

Интересно, чем не угодил int64?
Количество битов у него то же.


Влад   (2007-01-02 23:28:00) [12]

За uint64 спасибо, а нужен он будет, например, для шифра 64/12/16


Sha   (2007-01-02 23:20:00) [13]

Во-первых, начиная с D7, кажется, есть uint64.
Во-вторых, непонятно, для какой операции тебе не подходит int64?


Влад   (2007-01-02 23:14:00) [14]

Уже ответил [3] :)


Sha   (2007-01-02 23:10:00) [15]

Уже ответили [1] и [4].


Влад   (2007-01-02 23:08:00) [16]


> Как создать целый тип диапазоном от 0 до 2^64-1 (на 8 байт)?
>
> Будут ли с ним корректно работать операции xor, shl, shr,
>  mod, div, +-  и т.д.?

:))


Sha   (2007-01-02 23:06:00) [17]

Ты бы лучше вопрос мне задал.
Несложный :)


Влад   (2007-01-02 23:04:00) [18]

Ну посмотрел я. И так знаю, что программирую херово. Ты мне лучше б ошибки в моей программе указал.


Sha   (2007-01-02 22:50:00) [19]

сначала посмотри, как люди делают:
http://www.torry.net/pages.php?id=519


Влад   (2007-01-02 22:47:00) [20]

А мне надо свою.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо