Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Ладно, жидко сходил, но вот уважаемым донам более достойное >>
Отправлено
VasilyS
(80.92.96.25)
19 июня 2010, г. 17:28
В ответ на:
Увы, это правда. Это мне приятель прислал, соврал мерзавиц, я не проверил хотел выпендриться и облажался :-(
отправлено
VasilyS
19 июня 2010, г. 17:16
bool flag; // флаг условия.
unsigned int bp; // позитция бита который надо поставить или очистить.
unsigned int dst; // изменяемая величина.
// Обычное написание:
if (flag) dst |= (1 << bp );
else dst &= (~(1 << bp ));
//-------------------------
// Написание без условных переходов:
dst ^= ((-flag ^ dst) & (1 << bp));
Составить ответ
|
Вернуться на конференцию
Ответы
Ужас %(). Подразумевается, что flag 16 разрядный и принимает значения 0 и 0xFFFF, что не соответствует стандарту СИ (0=ЛОЖЬ, ДРУГОЕ=ИСТИНА)
-
mandigit
(19.06.2010, 20:47:35
91.79.39.182
,
пустое
)
У меня bool как unsigned char.
-
VasilyS
(19.06.2010, 21:56:4
80.92.96.25
,
пустое
)
О том и говорю
-
mandigit
(19.06.2010, 23:00:49
91.79.39.182
, 231 байт)
Не понимаю почему вы уделили такое внимание bool. Я показал принцип БЕЗПЕРЕХОДНОГО выполнения. В реальной программе flag может быть переменной ЛЮБОГО ВАШЕГО типа. Пусть uint, пусть uchar... Любая, могущая принимать значения 0 и ~0. В конце концов тип bool в классическом Си не определен (только С99), это же хрестоматийный пример. Так что все в ваших умелых руках. Главное - отсутствие условных переходов.
-
VasilyS
(19.06.2010, 23:21:13
80.92.96.25
,
пустое
)
можно проще сделать
-
mandigit
(20.06.2010, 00:23:42
91.79.39.182
, 401 байт)
Где же проще? Две операции сдвига на bp. Ведь величина bp необязательно известно компилятору заранее :-)
-
VasilyS
(20.06.2010, 00:44:6
80.92.96.25
,
пустое
)
Один хуй. Оптимайзер иара все раскручивает практически одинаково.
-
AZ
(19.06.2010, 20:39:28
92.112.114.158
,
пустое
)
Одинаково? У меня по разному. Второй вариант без условных переходов.
-
VasilyS
(19.06.2010, 21:54:57
80.92.96.25
,
пустое
)
Иногда все отдашь за линейный код. Branch - смерть.
-
VasilyS
(19.06.2010, 22:05:4
80.92.96.25
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
при вычитании трёх из шести получится:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru