![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Числа размером 64бита. [D6, Win95/98, Win2k, WinXP]
PAVIA © (2005-12-11 11:52:00)Как можно заставить дельфи воспринемать без знаковые числа размером 64бита.
от 0 до $FFFFFFFFFFFFFFFF.
Просто думаю переписывать на ассемблер. Или как еще можно заставить.
PAVIA (2005-12-11 23:46:00) [1]Решил сделать так. Подправить модуль system, чтобы при указании дириктивы {$DEFENI UNSIGNED} он выбирал нужные процедуры.
PAVIA (2005-12-11 23:42:00) [2]Хотелось что бы оболочка понимала данный тип. Но у вы она его совсем не воспринемает. В модуле System объявленны процедуры для работы с таким типом.
procedure __llmul;
procedure __lldiv;
procedure __lludiv;
procedure __llmod;
procedure __llmulo;
procedure __lldivo;
procedure __llmodo;
procedure __llumod;
procedure __llshl;
procedure __llushr;
Пробовол в создать модуль в котором тип имелбы ранг от 0 до ... (в ручную правил DCU) но и тут облом. Сравнение чисел проходит верно, а вот выбор процедур для деления и умнажения не верен.
64-bit (2005-12-11 21:01:00) [3]2 sniknik
В файле Kol.pas есть исходник этиого типа. Его легко переделать под беззнаковый тип.
sniknik (2005-12-11 17:18:00) [4]64-bit (11.12.05 16:52) [6]
это замена - аналог дельфевского Int64 (а значит тоже со знаком) для ранних версий дельфей в которых его еще не было (нужен чтобы обеспечить независимость от версии дельфи).
сам же коментарий к типу положил. не читаеш? ;)
64-bit (2005-12-11 16:52:00) [5]Попробуйте использовать библиотеку KOL. Там есть тип int64.
64-bit integer numbers
type I64 = record
64 bit integer record. Use it and correspondent functions below in KOL projects to avoid dependancy from Delphi version (earlier versions of Delphi had no Int64 type).
Lo, Hi: DWORD;
end;
type PI64 = ^ I64;
function MakeInt64( Lo, Hi: DWORD ): I64;
function Int2Int64( X: Integer ): I64;
procedure IncInt64( var I64: I64; Delta: Integer );
I64 := I64 + Delta;
procedure DecInt64( var I64: I64; Delta: Integer );
I64 := I64 - Delta;
function Add64( const X, Y: I64 ): I64;
Result := X + Y;
function Sub64( const X, Y: I64 ): I64;
Result := X - Y;
function Neg64( const X: I64 ): I64;
Result := -X;
function Mul64i( const X: I64; Mul: Integer ): I64;
Result := X * Mul;
function Div64i( const X: I64; D: Integer ): I64;
Result := X div D;
function Mod64i( const X: I64; D: Integer ): Integer;
Result := X mod D;
function Sgn64( const X: I64 ): Integer;
Result := sign( X ); i.e.:
if X < 0 then -1
if X = 0 then 0
if X > 0 then 1
function Cmp64( const X, Y: I64 ): Integer;
Result := sign( X - Y ); i.e.
if X < Y then -1
if X = Y then 0
if X > Y then 1
function Int64_2Str( X: I64 ): String;
function Str2Int64( const S: String ): I64;
function Int64_2Double( const X: I64 ): Double;
function Double2Int64( D: Double ): I64;
Anatoly Podgoretsky (2005-12-11 14:00:00) [6]Перепутал, в Дельфи нет беззнакового целочисленного типа в 64 бита.
vrem (2005-12-11 13:47:00) [7]Longword 32 бита был, повысили? :)
Anatoly Podgoretsky (2005-12-11 13:44:00) [8]Longword
PAVIA (2005-12-11 12:31:00) [9]Не понял что враппер?
Int64 не подходи так как знаковое число. А у мне нужны положительные числа.
TUser (2005-12-11 12:06:00) [10]Написать враппер над Int64?