Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Помогите разобраться в коде
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
vadim_rt
Есть кусочек кода

tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4);

взят из библиотеки под МК. Собственно вопрос что означает этот код, а конкретно что делает оператор"?" и ":"?
adnega
Цитата(vadim_rt @ Sep 1 2012, 19:24) *
Есть кусочек кода

tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4);

взят из библиотеки под МК. Собственно вопрос что означает этот код, а конкретно что делает оператор"?" и ":"?


Упрощенная запись оператора if
Код
if(cond) x=val1;
else x=val2;

может быть записано так

x = (cond)? val1 : val2;
Xenia
Цитата(vadim_rt @ Sep 1 2012, 20:24) *
tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4);


Это означает, что tI2C->I2CLK (а это по смыслу 1 байт) устанавливается по условию:
Если значение u32divider > 255 (т.е. больше полного байта), то устанавливаем максимум = 255.
Если значение u32divider находится в интервале от 4 до 255, то это значение устанавливаем, как оно есть.
Если значение u32divider < 4, то устанавливаем 4.

Такие выражения типичны, когда какую-то величину требуется обрезать с двух сторон (по максимуму и минимуму сразу). Например, э ... при начислении пенсий sm.gif - если начислено выше потолка, то получаешь потолок; если начислено ниже прожиточного минимума, то получаешь прожиточный минимум; а если в промежутке, то получаешь сколько начислено. Вот и здесь 255 - потолок, а 4 - прожиточный миниммум.
vadim_rt
Спасибо за ответы, разобрался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.