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

 
 
> Помогите разобраться в коде
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
Ответов (1 - 4)
adnega
сообщение Sep 1 2012, 16:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(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;
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 1 2012, 17:23
Сообщение #3


Гуру
******

Группа: Модератор 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
VAI
сообщение Sep 2 2012, 09:50
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



http://ru.wikipedia.org/wiki/Тернарная_условная_операция
http://khpi-iip.mipk.kharkiv.edu/library/pgm/kr/c_2.html#211


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
vadim_rt
сообщение Sep 3 2012, 05:43
Сообщение #5





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



Спасибо за ответы, разобрался.
Go to the top of the page
 
+Quote Post

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

 


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


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