Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
ВнизПомогите перевести с C на Pascal Найти похожие ветки
← →
AlexKniga © (2006-08-11 10:13) [0]#define EMF_FORWDED ( 1 << 3 )
В Паскалевском написании это будет
const EMF_FORWDED = ( 1 shl 3 );
?
← →
Jeer © (2006-08-11 10:21) [1]Будь проще:)
const
EMF_FORWDED = 8;
← →
AlexKniga © (2006-08-11 10:41) [2]Jeer
Спасибо!
Я не был уверен, чтот "<<" в данном случае битовый сдвиг.
← →
DrPass © (2006-08-11 10:52) [3]
> #define EMF_FORWDED ( 1 << 3 )
Наверное, писавший этот дефайн программист истекал слюнями от собственной крутизны
← →
Desdechado © (2006-08-11 12:17) [4]А что, в Дельфи {$DEFINE} уже непопулярен?
← →
Юрий Зотов © (2006-08-11 12:33) [5]> Desdechado © (11.08.06 12:17) [4]
Популярен, но имеет несколько другое назначение.
← →
Desdechado © (2006-08-11 12:42) [6]> Юрий Зотов © (11.08.06 12:33) [5]
Какое из назначений использовалось в тексте, приведенном автором, не известно. В си оно многозначное. Можно использовать как подстановку в тексте, а можно для всяких условностей при компиляции, а можно и комбинировать.
← →
clickmaker © (2006-08-11 13:21) [7]
> Наверное, писавший этот дефайн программист истекал слюнями
> от собственной крутизны
в соседней ветке вообще (1<<0). Вот уж где крутизна )
← →
evvcom © (2006-08-11 13:28) [8]> [7] clickmaker © (11.08.06 13:21)
Еще на это можно было || 0 добавить и другие подобные прибамбасы :)
← →
Don Nikola © (2006-08-11 13:32) [9]2AlexKniga:
Вы думаете, что сишники могли написать "1 shr 3"? Они хоть и сишники, но не настолько же.
← →
evvcom © (2006-08-11 13:32) [10]> [3] DrPass © (11.08.06 10:52)
Кстати, такая запись может быть была сделана из соображений наглядности при работе с битами, что в EMF_FORWDED установлен 3 бит. А в восьмерке это еще надо посчитать.
← →
Jeer © (2006-08-11 13:36) [11]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;
Так шта...
← →
DrPass © (2006-08-11 13:40) [12]
> Jeer © (11.08.06 13:36) [11]
> evvcom © (11.08.06 13:32) [10]
А чем hex-константы не подходят-то? Запомнить 16 кодов проще чем таблицу умножения.
← →
Jeer © (2006-08-11 14:01) [13]DrPass © (11.08.06 13:40) [12]
Но надежнее, опять-таки, явно указывать нужный бит
а с FA можно и ошибиться при переводе.
Пример, маскирующая константа на 7-й бит
const
c7reset: word = MaxWord - (1 shl 7);
← →
evvcom © (2006-08-11 14:13) [14]> [12] DrPass © (11.08.06 13:40)
> А чем hex-константы не подходят-то?
Подходят, почему нет-то? Просто у каждого свои восприятия различных представлений. Я просто предположил причину.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c