Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Вниз

Целочисленные типы с указанием разрядности   Найти похожие ветки 

 
PinDOS   (2010-08-23 16:36) [0]

Задумался о указании разрядности в названии целочисленных типов (в некоторых случаях надо что бы разрядность не зависела от компилятора, железа и ОС и что бы было очевидно какую разрядность имеет переменная), с этой целью сделал свой модуль, где написал примерно следующее (что и породило еще больше вопросов)


Int8U = Byte;
Int8S = ShortInt;
Int16U = Word;
Int16S = SmallInt;
Int32U = Cardinal;
Int32S = LongInt;
// Читал что тип Integer в некоторых Pascal-компиляторах
//  зависит от разрядности системы в которой
//  компелировался код (касательно компилятора используемого Lazarus"сом),
//  правда ли это и что будет с другими типами на другом железе и ОС?
Int64U = Int64;
IntS = Integer; // на тот случай если мне безразлична разрядность


Попытка использовать эти типы сделала код затруднительным к прочтению (все таки непривычные типы данных), допустим ли такой подход и как решается изложенная в начале проблема профессионалами? :)


 
Anatoly Podgoretsky ©   (2010-08-23 16:39) [1]

Вертай все взад.


 
Сергей М. ©   (2010-08-23 16:45) [2]


> что бы разрядность не зависела от компилятора, железа и
> ОС


Гы..
А сам при этом жество обозначил эту зависимость в именах идентификаторов)


 
Юрий Зотов ©   (2010-08-23 16:47) [3]

> как решается изложенная в начале проблема профессионалами

Никак не решается. У них этой проблемы просто нет. Не так уж трудно запомнить разрядность всего лишь 8 типов. Тем более, что названия 5 из них говорят сами за себя (учитывая generic) - так что запоминать надо всего 3.


 
PinDOS   (2010-08-23 17:06) [4]


> Вертай все взад.

почему?


> Гы..

Я имел ввиду что бы разрядность выбирал я, а не компилятор


> Не так уж трудно запомнить разрядность всего лишь 8 типов

Выдержка из документации по FreePascal (http://www.freepascal.org/docs-html/ref/refsu5.html)

Type   Range  Size in bytes
 
Byte  0 .. 255  1
Shortint  -128 .. 127  1
Smallint  -32768 .. 32767  2
Word  0 .. 65535  2
Integer  either smallint or longint  size 2 or 4
Cardinal  longword  4
Longint  -2147483648 .. 2147483647  4
Longword  0 .. 4294967295  4
Int64  -9223372036854775808 .. 9223372036854775807  8
QWord  0 .. 18446744073709551615  8

Делфи хорошая среда разработки, но надо быть готовым переломить себя и оч. не хочется что бы в далеких недрах кода сбойнула какая то мелочь


 
Юрий Зотов ©   (2010-08-23 17:32) [5]

> надо быть готовым переломить себя

Как только Вы объясните мне зачем и почему мне надо себя ломать, я немедленно начну это делать.


 
Сергей М. ©   (2010-08-23 17:40) [6]


> что бы разрядность выбирал я, а не компилятор


Ну и выбирай себе на здоровье из имеющихся)
Зачем свои-то типы плодить без явной надобности ?
Просто не используй типы Integer и Cardinal - они платформозависимы


 
RWolf ©   (2010-08-23 18:10) [7]

А кто в курсе, зачем разрабы FreePascal вообще сделали этот финт ушами с разрядностью Integer? многовато порядка в языке — надо, чтобы как в Си?


 
Юрий Зотов ©   (2010-08-23 18:29) [8]


> Сергей М. ©   (23.08.10 17:40) [6]

Или наоборот - использовать только такие. Тогда исходный код будет платформонезависимым.


 
Сергей М. ©   (2010-08-23 18:35) [9]


> Юрий Зотов ©   (23.08.10 18:29) [8]


Ну автор-то как раз таки и не желает полагаться на платформонезависимость.
Ему, как я понял, нужно чтобы, скажем, переменная некоего типа при любом "раскладе" занимала 2 байта и ни битом больше/меньше).. Но при этом тип Word или SmallInt его почему-то не устраивает..


 
0x00FF00 ©   (2010-08-23 19:06) [10]


> Или наоборот - использовать только такие. Тогда исходный
> код будет платформонезависимым.

Да ни фига.
Скажем, если в 64-битном окружении скомпилировать сдвиг Cardinal на 48 разрядов вправо, то это будет нормально.
А вот если в 32-разрядном — тады ой.


 
PinDOS   (2010-08-23 19:29) [11]


> Но при этом тип Word или SmallInt его почему-то не устраивает.

Занимался простой обработкой изображений - быстрая прорисовка прозрачного изображения на другом, растягивание, сжатие картинок... Ставил режим 32бита, потому пиксель занимал 4 байта (Red, Blue, Green, Opacity), доступ к цветовым компонентам производил через тип

 RDWord = packed record
   case Integer of
     0: (B: array [0..3] of Byte);
     1: (DW: Cardinal);
     2: (W: array [0..1] of Word);
     4: (Int: Integer);
   end;


собственно для этого и решил ввести другие наименования типов, тут названия Int32U мне кажутся более подходящими (нету под рукой переделанного примера), но в остальном коде это выглядит непривычно, а люди воспринимают это в штыки, я потому и спрашиваю, как сделать так что бы красиво было, но и чтобы код был един и не писать там Cardinal, а там Int32U


 
Anatoly Podgoretsky ©   (2010-08-23 19:32) [12]


>  имел ввиду что бы разрядность выбирал я, а не компилятор

Используй только фундаментальные типы.


 
0x00FF00 ©   (2010-08-23 19:51) [13]

Cardinal меняй на DWORD, Integer на LongInt.
И наступит щастье.


 
icWasya ©   (2010-08-24 10:43) [14]

А вот переводить программу на другой язык - например с Pascal на C# или с C++ на Delphi - вот тогда и попробуйте понять - что означает short - в си и дельфи это разные вещи.
А когда есть набор типов Int8,uInt8 ... Int64 - тогда меньше головной боли.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2010.11.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.004 c
15-1280907858
12
2010-08-04 11:44
2010.11.14
Мысленное управление. Не обманывают ли?


15-1281001916
Аналитик
2010-08-05 13:51
2010.11.14
Какая технология лучше для данной задачи?


2-1282306183
подмастерье
2010-08-20 16:09
2010.11.14
Создание своей формы


3-1247748056
_REA
2009-07-16 16:40
2010.11.14
Выборка Master и Detail


10-1169798225
tytus
2007-01-26 10:57
2010.11.14
ExcelApplication.RemoteMachineName





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский