У меня есть несколько вопросов по поводу следующего кода из книги Delphi FoundationsРазъяснение на числовом форматирования
S := Format('It is %d', [65]); //assigns it to 64
ли 64 опечатка?
Почему
S := Format('%u', [-1]);
4294967295
?
У меня есть несколько вопросов по поводу следующего кода из книги Delphi FoundationsРазъяснение на числовом форматирования
S := Format('It is %d', [65]); //assigns it to 64
ли 64 опечатка?
Почему S := Format('%u', [-1]);
4294967295
?
S := Format('It is %d', [65])
будет производить 'It is 65'
. Если в книге говорится иначе, это неправильно.
S := Format('%u', [-1])
производит '4294967295'
, потому что число форматируется как без знака значения. Подписанный -1
имеет тот же шаблон бита, что и без знака 4294967295
(они оба равны $FFFFFFFF
в шестнадцатеричном виде).
(1) Опечатка - см http://delphifoundations.com/errata/ для этого одного и более (и если вы заметили любые другие себя, я был бы благодарен за обратную связь).
(2) По той причине, что я говорю в книге:
Если знаковое целое пройдена, он просто брошен в беззнаковое целое . Учитывая, что целое число со знаком представлено внутри, , это не просто отключит знак от точки неглубокого лица . Например,
Format('%u', [-1])
возвращает '4294967295', а не '1'. Если только отгонка знака - это то, что вы хотите, затем сначала передайте значениеAbs
стандартной функции:Format('%u', [Abs(-1)])
.
Итак, возьмите Integer/Int32 и кардинал/UInt32: экземпляр обоих этих типов занимает 32 бит памяти. Однако в случае Integer/Int32 один из этих битов используется для записи знака (плюс или минус?), Тогда как с кардиналом/UInt32 нет записи для записи; вместо этого этот же бит используется для представления числа, намного большего, чем Integer/Int32. Таким образом, внутреннее представление Int32 (-1) оказывается таким же, как внутреннее представление UInt32 (4294967295).
(3) «мирянин» в этом контексте является просто синонимом «нетехнического человеком», «кто-то, кто не выродок» и т.д.
Есть три вопроса здесь. Пожалуйста, спросите один за раз. Убедитесь, что вопрос завершен. Не ссылайтесь на ресурсы, с которыми вы не можете ссылаться. Если вы собираетесь указывать код, убедитесь, что вы правильно его расшифровываете на 100%. Код в вопросе не компилируется. Наконец, если вы хотите знать, что означает «мирянин», это неправильный сайт. Я предлагаю вам посмотреть это в словаре. –
Я удалил подпись из вашего вопроса. Вопросы автоматически подписываются. Вам не нужно и не следует делать это вручную. –
«Остановитесь, как неясно, что вы просите»? Какой мусор, хотя человек (а не ОП), который полностью отредактировал название моей книги, не помог.Если вы хотите проигнорировать мой ответ из-за моего особого отношения к этому предмету, тогда хорошо, однако Remy Lebeau дал отличный ответ и до того, как я это сделал. –