Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Типы переменных [D5, Win95/98]


SergeN ©   (2003-01-28 15:29:00) 

Привет!
Такая ситуация:
Переменная i принимает два значения:1 и -1.
Какой тип лучше использовать?


Юрий Зотов   (2003-01-28 17:06:00) [1]

> han_malign © (28.01.03 16:12)

Интересный тест. Правда, все это есть и в справке...

Знаете, а все-таки размер однобайтовой переменной - ровно 1 байт. Честное слово. Независимо от выравнивания. И то, что после нее идет неиспользуемый участок памяти, этот размер не увеличивает.

То же касается и двубайтовых, да и любых других переменных.


passm   (2003-01-28 17:05:00) [2]

Palladin © (28.01.03 16:12)> Он самый.
Для уверенности можно посмотреть:
type
TVerySmallInteger = -1..1;
...
LabelX.Caption:= IntToStr(SizeOf(TVerySmallInteger))
...
Относится и к остальным числовым типам/переменным.


REA   (2003-01-28 16:19:00) [3]

Типа так лучше читать, фиг знает сколько байт используется:

TGoodReadableSet = (grPositive, grNegative);
IntValues: Array[TGoodRadableSet] = (-1, 1);

A: TGoodReadableSet;

A := grPositive;
I := IntVlaues[A];


han_malign   (2003-01-28 16:12:00) [4]

2 Юрий Зотов © (28.01.03 15:41)
Немного попутал:
program Align;
{$APPTYPE CONSOLE}
{$A-}
uses Windows;
type TT=class
private
b: byte;
w: word;
dw: DWORD;
public
function ByteSz: integer;
function WordSz: integer;
end;

function TT.ByteSz: integer;
begin
Result:=DWORD(@w)-DWORD(@b);
end;

function TT.WordSz: integer;
begin
Result:=DWORD(@dw)-DWORD(@w);
end;

var
b: byte;
w: word;
dw: DWORD;
begin
with TT.Create do begin
Writeln("Byte size - ",ByteSz);
Writeln("Word size - ",WordSz);
Free;
end;
Writeln("Local Byte size - ",DWORD(@w)-DWORD(@b));
Writeln("Local Word size - ",DWORD(@dw)-DWORD(@w));
end.


Display:
Byte size - 1
Word size - 2
Local Byte size - 2
Local Word size - 2

Для {$A+} (по умолчанию) соответственно
Byte size - 2
Word size - 2
Local Byte size - 2
Local Word size - 2

З.Ы. Так что лучше SmallInt - если с выравниванием, или ShortInt - если без...


Palladin   (2003-01-28 16:12:00) [5]

2 passm
> Использует 1 байт
shortint тобишь


passm   (2003-01-28 16:08:00) [6]

type
TVerySmallInteger = -1..1;
Использует 1 байт.


Chubais   (2003-01-28 15:51:00) [7]


> можно всего 2 бита использовать под это ...
> только зачем ?

гыыы
а почему это 2?
по-моему, одного хватит...


Anatoly Podgoretsky   (2003-01-28 15:48:00) [8]

Так не спрашивают как защифровать, упаковать два абстрактных значения, а конкретно в чем хринить именно единиуц и минус единицу. Для это походят именно чисто целочисленные типы.


bis   (2003-01-28 15:45:00) [9]

можно всего 2 бита использовать под это ...
только зачем ?


Shadow   (2003-01-28 15:45:00) [10]

asm %))


Юрий Зотов   (2003-01-28 15:41:00) [11]

> han_malign © (28.01.03 15:33)
> ...are always aligned for optimal access
> по любому 4-е байта занимает.

Какое отношение имеет выравнивание к размеру? До сих пор я полагал, что никакого. Вероятно, один из нас неправ.


> SergeN (28.01.03 15:29)
> Какой тип лучше использовать?

Смотря что значит "лучше". Если для скорости, то integer, а если для размера, то однобайтовый (SmallInt или ShortInt - точно не помню, посмотрите в справке).


SergeN   (2003-01-28 15:37:00) [12]

Спасибо! Просто беспокоюсь за ресурсы...


han_malign   (2003-01-28 15:33:00) [13]

Regardless of the state of the $A directive, variables and typed constants are always aligned for optimal access.
- так что, для Intel>386 архитектуры, по любому 4-е байта занимает.


Anatoly Podgoretsky   (2003-01-28 15:33:00) [14]

Integer


gsu   (2003-01-28 15:31:00) [15]

boolean
1..-1
integer ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо