![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите перевести с 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;