Форум: "Прочее";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c