Распространенные типы данных: сколько их байтов? - PullRequest
5 голосов
/ 11 сентября 2010

Я хотел бы знать, сколько байтов

  • 32-разрядное целое число

  • ASCII-символ (символ в C ++?)

  • Указатель (4 байта?)

  • Short

  • Float

Возникает в Delphi, и если в большинстве языков оно одинаково

Кроме того, имеют ли типы данных, упомянутые выше, постоянный размер?Я имею в виду, что целые числа 0, 4, 123 и 32231 имеют одинаковый размер?

Ответы [ 4 ]

8 голосов
/ 11 сентября 2010

32-разрядное целое число равно ВСЕГДА четыре байта, поскольку 1 байт = 8 бит.

  • Integer - это 32-разрядное целое число со знаком, а Cardinal - это 32-разрядное целое число без знака. Таким образом, они всегда занимают четыре байта, независимо от значения, которое они представляют. (На самом деле, чрезвычайно важно, что простые типы имеют фиксированную ширину - низкоуровневое программирование действительно зависит от этого! Это даже краеугольный камень работы компьютеров.)

  • Меньшие целочисленные типы: Smallint (16-разрядный без знака), Word (16-разрядный без знака) и Byte (8-разрядный без знака). Большие целочисленные типы: Int64 (64-разрядная подпись) и UInt64 (64-разрядная подпись).

  • Char был 1 байт AnsiChar до Delphi 2009; теперь это 2 байта WideChar.

  • Pointer всегда 4 байта, потому что Delphi в настоящее время создает только 32-битные приложения. Когда он поддерживает 64-битные приложения, Pointer станет 8 байтов.

  • В Delphi есть три распространенных типа с плавающей точкой. Это Single, Double (= Real) и Extended. Они занимают 4, 8 и 10 байтов соответственно.

Для исследования размера данного типа, например, Short, просто попробуйте

ShowMessage(IntToStr(SizeOf(Short)))

Справка:

2 голосов
/ 11 сентября 2010

В C / C ++, SizeOf (Char) = 1 байт, как того требует стандарт C / C ++.

В Delphi SizeOf (Char) зависит от версии (1 байт для не-Unicode-версий, 2 байта для Unicode-версий), поэтому Char в Delphi больше похож на TChar в C ++.

1 голос
/ 11 сентября 2010

Может отличаться для разных машин, поэтому вы можете использовать следующий код, чтобы определить размер целого числа (например):
cout << "Integer size:" << sizeof(int);

0 голосов
/ 13 сентября 2010

Я не хочу вас сильно смущать, но есть и проблема выравнивания;Если вы определите запись, подобную этой, то от компилятора будет зависеть, как будет выглядеть ее макет:

type Test = record
    A: Byte;
    B: Pointer; 
end;

Если скомпилировано с {$ A1}, SizeOf(Test) при компиляции будет иметь значение 5с помощью {$ A4} вы получите 8 (по крайней мере, на нынешних 32-битных Delphi, то есть!) Здесь есть все виды маленьких ошибок, поэтому я бы посоветовал проигнорировать это сейчас и прочитать статью, подобную этой когда возникает необходимость; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...