Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизБольшие числа. Найти похожие ветки
← →
Влад (2007-01-08 18:17) [0]
var A:uint64;
begin
A:= $B7E151628AED2A6B; //[Error] Constant expression violates subrange bounds
Как я понял, константа слишком большая.
Однако:
var A:int64;
begin
A:= $B7E151628AED2A6B; //[Error] Constant expression violates subrange bounds
ошибки не вызывает. Почему? Ведь uint64 измеряется от 0 до 2^64-1 (а число в этот промежуток входит). Как с этим бороться?
← →
Влад (2007-01-08 18:17) [1]Второй код неправильно напечатал.
var A:int64;
begin
A:= $B7E151628AED2A6B;
← →
sniknik © (2007-01-08 18:30) [2]
var A:uint64;
//чтобы не восприняло константу как отрицательный int64
begin
A:= uint64($B7E151628AED2A6B);
← →
Влад (2007-01-08 18:33) [3]спасибо.
← →
Влад (2007-01-08 18:39) [4]Только вот в Watches наблюдаю A все равно как отрицательное. Или это Watches неправильно отображает uint64 числа?
← →
sniknik © (2007-01-08 19:02) [5]там оно как интеджер, знаковое представлено (ну не "развит" еще тип ;), может в более поздней дельфе посмотреть),
попробуй арифметические операции с ним, можно увидеть что результат как от беззнакового. (ну если например поделить на достаточно большое число, чтобы старший бит который у знаковых за знак отвечает освободился, то увидишь неотрицательное и при преобразовании к uint64. а ведь деление на знак не влияет)
но вот что плохо, при любом приведении и передачи в знаковый параметр оно автоматом его поменяет ;(, и ошибок не выдаст.
← →
sniknik © (2007-01-08 19:03) [6]> и при преобразовании к uint64
ошибка копи пасте надо читать "к int64"
← →
Влад (2007-01-08 19:12) [7]
> может в более поздней дельфе посмотреть
А какая самая последняя? У меня 7.0 Build 4.453
← →
sniknik © (2007-01-08 19:22) [8]2006
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c