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

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

Помогите перевести с C на Pascal


AlexKniga ©   (2006-08-11 10:13:00) 

#define EMF_FORWDED ( 1 << 3 )

В Паскалевском написании это будет
const EMF_FORWDED = ( 1 shl3 );
?


evvcom   (2006-08-11 14:13:00) [1]

> [12] DrPass ©   (11.08.06 13:40)
> А чем hex-константы не подходят-то?

Подходят, почему нет-то? Просто у каждого свои восприятия различных представлений. Я просто предположил причину.


Jeer   (2006-08-11 14:01:00) [2]

DrPass ©   (11.08.06 13:40) [12]

Но надежнее, опять-таки, явно указывать нужный бит
а с FA можно и ошибиться при переводе.

Пример, маскирующая константа на 7-й бит

const
c7reset: word =  MaxWord - (1 shl 7);


DrPass   (2006-08-11 13:40:00) [3]


> Jeer ©   (11.08.06 13:36) [11]


> evvcom ©   (11.08.06 13:32) [10]

А чем hex-константы не подходят-то? Запомнить 16 кодов проще чем таблицу умножения.


Jeer   (2006-08-11 13:36:00) [4]

DrPass ©   (11.08.06 10:52) [3]
clickmaker ©   (11.08.06 13:21) [7]

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

Кстати, я в паскале пользуюсь таким же и вот для чего.

Достаточно часто используются маскирующие/выделяющие константы,
а железячники  помнят наизусть назначения бит в интерфейсах.:)

Если мне нужно выделить 23-й бит, то логично определить константу
как
c23b = 1 shl 23;
а не считать 2^23 и
c23b = 8388608;
тем более, что будет абсолютно непонятно, сколько там единиц.

Или для выделение 23 и 25 бит я точно напишу
c25_23 = 5 shl 23;
а не 41943040 :))

Еще пример - вызов функции с флагом, значение которого определяется как cA or cB or cF и тп

Логично определять константы таким образом:
cA = 1 shl 0;
cB = 1 shl 1
cC = 1 shl 2;

Так шта...


Don Nikola   (2006-08-11 13:32:00) [5]

2AlexKniga:

Вы думаете, что сишники могли написать "1 shr3"? Они хоть и сишники, но не настолько же.


evvcom   (2006-08-11 13:32:00) [6]

> [3] DrPass ©   (11.08.06 10:52)

Кстати, такая запись может быть была сделана из соображений наглядности при работе с битами, что в EMF_FORWDED установлен 3 бит. А в восьмерке это еще надо посчитать.


evvcom   (2006-08-11 13:28:00) [7]

> [7] clickmaker ©   (11.08.06 13:21)

Еще на это можно было || 0добавить и другие подобные прибамбасы :)


clickmaker   (2006-08-11 13:21:00) [8]


> Наверное, писавший этот дефайн программист истекал слюнями
> от собственной крутизны

в соседней ветке вообще (1<<0). Вот уж где крутизна )


Desdechado   (2006-08-11 12:42:00) [9]

> Юрий Зотов ©   (11.08.06 12:33) [5]
Какое из назначений использовалось в тексте, приведенном автором, не известно. В си оно многозначное. Можно использовать как подстановку в тексте, а можно для всяких условностей при компиляции, а можно и комбинировать.


Юрий Зотов   (2006-08-11 12:33:00) [10]

> Desdechado ©   (11.08.06 12:17) [4]

Популярен, но имеет несколько другое назначение.


Desdechado   (2006-08-11 12:17:00) [11]

А что, в Дельфи {$DEFINE} уже непопулярен?


DrPass   (2006-08-11 10:52:00) [12]


> #define EMF_FORWDED ( 1 << 3 )

Наверное, писавший этот дефайн программист истекал слюнями от собственной крутизны


AlexKniga   (2006-08-11 10:41:00) [13]

Jeer
Спасибо!
Я не был уверен, чтот "<<" в данном случае битовый сдвиг.


Jeer   (2006-08-11 10:21:00) [14]

Будь проще:)

const
 EMF_FORWDED = 8;


Наверх

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