реклама на сайте
подробности

 
 
> Помогите разобраться в коде
vadim_rt
сообщение Sep 1 2012, 16:24
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 4-11-07
Пользователь №: 32 033



Есть кусочек кода

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

взят из библиотеки под МК. Собственно вопрос что означает этот код, а конкретно что делает оператор"?" и ":"?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Xenia
сообщение Sep 1 2012, 17:23
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(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 - прожиточный миниммум.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 23:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01555 секунд с 7
ELECTRONIX ©2004-2016