Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

delphi +qword (u64)   Найти похожие ветки 

 
cawwa   (2007-02-17 18:15) [0]

А есть ли в delphi тип переменной QWord (u64), может он просто иначе называется?


 
begin...end ©   (2007-02-17 18:30) [1]

UInt64 ?


 
Аноним   (2007-02-17 21:45) [2]

Int64


 
Ketmar ©   (2007-02-17 22:00) [3]

> Аноним   (17.02.07 21:45) [2]
знаковый.


 
atruhin ©   (2007-02-18 09:17) [4]

Нет. Не так давно было обсуждение UInt64 приводились примеры что Delphi работает
с ним как со знаковым.


 
atruhin ©   (2007-02-18 09:18) [5]

Т.е. аналога QWord (u64) в delphi нет


 
palva ©   (2007-02-18 15:07) [6]

atruhin ©   (18.02.07 09:17) [4]
Там приводились примеры, на Delphi 7
Похоже, что в Turbo Delphi этот тип был доработан, хотя все еще не документирован. Следующий пример запускался на Turbo Delphi. Попробовать его на Delphi 7 возможности не имею, т. к. дома Delphi 7 не установлен.

{$APPTYPE CONSOLE}
uses SysUtils;
var
 ui: UInt64;
begin
 ui := $FFFFFFFFFFFFFFF0;
 WriteLn(ui);  // 18446744073709551600
 ui := 18446744073709551600;
 WriteLn(ui);  // 18446744073709551600
 WriteLn(IntToHex(ui, 16));        // 00000000FFFFFFF0
 WriteLn(IntToHex(ui div $100000000, 8));  // FFFFFFFF
 WriteLn(IntToHex(ui mod $100000000, 8));  // FFFFFFF0
 ui := ui div 100;
 WriteLn(ui);  // 184467440737095516
end.

Как видите, остались претензии только к функции IntToHex, хотя возможно там имеется какая-то другая функция.


 
guav ©   (2007-02-19 03:03) [7]

> [6] palva ©   (18.02.07 15:07)

хм... write-то и в Д7 вроде работал, надо его варифметике и сравнениях проверить.


 
palva ©   (2007-02-19 10:11) [8]

Вот как работает в D7

{$APPTYPE CONSOLE}
uses SysUtils;
type
aui = array [0..1] of LongWord;
taui = ^aui;
var
ui: UInt64;
begin
// ui := $FFFFFFFFFFFFFFF0; // Constant expression violates subrange bounds
// Присваивание пришлось делать так:
taui(@ui)^[0] := $FFFFFFF0;
taui(@ui)^[1] := $FFFFFFFF;
WriteLn(ui);  // -16
// ui := 18446744073709551600; // Integer constant too large
// ну это само-собой, поэтому закомментируем.
// WriteLn(ui);  // 18446744073709551600
WriteLn(IntToHex(ui, 16));        // 00000000FFFFFFF0
WriteLn(IntToHex(ui div $100000000, 8));  // 00000000
WriteLn(IntToHex(ui mod $100000000, 8));  // FFFFFFFFFFFFFFF0
// Этот остаток от деления равен -16
ui := ui div 3;
// Если разделить на 100, как в предыдущем прогоне, получим 0
WriteLn(ui);  // -5
// А здесь работает как обычное отрицательное число,
// то есть воспринимается как знаковый Int64
end.


 
sniknik ©   (2007-02-19 11:55) [9]

> остались претензии только к функции IntToHex
попробуй заменить   WriteLn(IntToHex(ui, 16)); на WriteLn(IntToHex(Int64(ui), 16))
похоже перезагруженной функции с UInt64 нет (по умолчанию преобразует к integer), а в шестнадцатеричном представлении есть знак или нет его неважно.



Страницы: 1 вся ветка

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
11-1150545002
Cawa
2006-06-17 15:50
2007.03.18
Запись текста из memo в blob поле


15-1172315589
vasIZmax
2007-02-24 14:13
2007.03.18
Боевое крещение...


1-1169483449
Dmitry_177
2007-01-22 19:30
2007.03.18
Непонятные ошибки при компиляции


2-1172663875
tan
2007-02-28 14:57
2007.03.18
Работа с OpenOffice.


2-1172149513
ElectriC
2007-02-22 16:05
2007.03.18
ListBox