Форум: "Прочее";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Внизunsigned 64-bit Найти похожие ветки
← →
_longint (2006-11-03 09:27) [0]unsigned 64-bit — такое понятие вообще существует? или максимальный unsigned 32-bit?
← →
Anatoly Podgoretsky © (2006-11-03 09:28) [1]> _longint (03.11.2006 09:27:00) [0]
Существует и unsigned 128-bit
← →
_longint (2006-11-03 09:33) [2]И какой тип переменной за это отвечает в delphi? (если в delphi есть такое конечно)
← →
Anatoly Podgoretsky © (2006-11-03 09:40) [3]> _longint (03.11.2006 09:33:02) [2]
В Дельфи никакой
Но ты можешь использовать для 64 бит LongWord в диапазоне до 2^63
← →
Percent (2006-11-03 09:49) [4]Максимум в Delphi 6 - signed 64-bit, int64
Вообще, справка по этому поводу дает исчерпывающую информацию.
Мало того, что есть - реализуй свои типы и/или классы.
← →
MBo © (2006-11-03 09:49) [5]>Anatoly Podgoretsky © (03.11.06 09:40) [3]
LongWord = DWord, так что не пойдет, видимо
← →
Anatoly Podgoretsky © (2006-11-03 10:21) [6]> MBo (03.11.2006 09:49:05) [5]
Я ошибся, имел в виду Int64
← →
guav © (2006-11-03 13:12) [7]есть UInt64
← →
guav © (2006-11-03 13:15) [8]> [4] Percent (03.11.06 09:49)
> , справка по этому поводу дает исчерпывающую информацию.
Про UInt64 справка не знает, а ведь он есть
← →
palva © (2006-11-03 13:39) [9]guav © (03.11.06 13:15) [8]
> Про UInt64 справка не знает, а ведь он есть
Похоже, что UInt64 ничем не отличается от Int64:
{$APPTYPE CONSOLE}
var
ui64: UInt64;
begin
ui64 := $7FFFFFFFFFFFFFFF;
WriteLn(ui64); // 9223372036854775807
ui64 := ui64 + 1;
WriteLn(ui64); // -9223372036854775808
ui64 := ui64 div 10;
WriteLn(ui64); // -922337203685477580
end.
← →
guav © (2006-11-03 13:42) [10]> [9] palva © (03.11.06 13:39)
Нет, на самом деле UInt64 - это истинно беззнаковый 64битный тип, просто ни WriteLn ни другие способы вывода его не поддерживают.
Вот демонстрация различия:procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Lines.Add(intToStr(Low(UInt64) shr 2));
Memo1.Lines.Add(intToStr(High(UInt64) shr 2));
Memo1.Lines.Add(intToStr(Low(Int64) shr 2));
Memo1.Lines.Add(intToStr(High(Int64) shr 2));
end;
← →
MeF Dei Corvi © (2006-11-03 13:44) [11]
{$APPTYPE CONSOLE}
begin
writeln(High(UInt64));
writeln(Low(UInt64));
readln;
end.
Возвращает:
18446744073709551615
0
← →
palva © (2006-11-03 13:46) [12]guav © (03.11.06 13:42) [10]
Не только WriteLn с ним не работает, но также и арифметические операции, например div. Что показывает мой пример.
← →
guav © (2006-11-03 13:47) [13]> [11] MeF Dei Corvi © (03.11.06 13:44)
Ну значит поддерживает, тогда дело в другом, арифметика не поддерживает.
Format и IntToStr не поддерживают.
← →
guav © (2006-11-03 13:49) [14]> [12] palva © (03.11.06 13:46)
Ну не работает, но диапазон то правильный, что следующие два примера показывают.
← →
Ketmar © (2006-11-03 13:56) [15]>[14] guav(c) 3-Nov-2006, 13:49
>Ну не работает, но диапазон то правильный, что следующие
>два примера показывают.
обалдеть. а поясни-ка мне разницу между знаковым и беззнаковым int64, если последний никто не поддерживает.
← →
palva © (2006-11-03 13:59) [16]> Возвращает:
> 18446744073709551615
Это конечно, хорошо. Попробую пояснить. Пусть я собираюсь вычислять
a^b mod m,
то есть я присваиваю s единицу и делаю b раз следующее: умножаю s на a и беру по модулю m. Если s имеет тип UInt64 и если результат очередного умножения не превысит вышеуказанное число 18446744073709551615, то я имею право предположить, что все будет работать правильно. Однако... как мы видели произведение не должно превышать 9223372036854775807, в противном случае даже знак будет не тот.
← →
guav © (2006-11-03 14:08) [17]> [15] Ketmar © (03.11.06 13:56)
Разница в том что компилятор таки думает что UInt64 беззнаковый.procedure Test(I: Uint64);
begin
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Test(-1);
end;
Подобная проблема была со сторонним компонентом (в котором кто-то пытался использовать этот хитрый тип, причём не к месту), решил добавлением type UInt64 = Int64; . Оттуда и узнал про существование его.
То что он беззнаковый только для компилятора при проверках диапазона узнал только сейчас, до того думал что то настоящий беззнаковый тип.
← →
Ketmar © (2006-11-03 17:20) [18]>[17] guav(c) 3-Nov-2006, 14:08
>Разница в том что компилятор таки думает что UInt64
>беззнаковый.
таки работает с ним он всё равно неверно. так что чем-то не тем он думает. %-)
← →
Mystic © (2006-11-03 17:43) [19]Ой, напомнили... Я уже два дня вожусь с этими unsigned long long, только в Ц. Потихоньку от битовых операций мозги заворачиваются...
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.11.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.042 c