vadim_rt 0 1 сентября, 2012 Опубликовано 1 сентября, 2012 · Жалоба Есть кусочек кода tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4); взят из библиотеки под МК. Собственно вопрос что означает этот код, а конкретно что делает оператор"?" и ":"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 1 сентября, 2012 Опубликовано 1 сентября, 2012 · Жалоба Есть кусочек кода tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4); взят из библиотеки под МК. Собственно вопрос что означает этот код, а конкретно что делает оператор"?" и ":"? Упрощенная запись оператора if if(cond) x=val1; else x=val2; может быть записано так x = (cond)? val1 : val2; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 1 сентября, 2012 Опубликовано 1 сентября, 2012 · Жалоба tI2C->I2CLK = (u32divider & ~0xFF)? 0xFF:((u32divider & ~0x03)? u32divider: 4); Это означает, что tI2C->I2CLK (а это по смыслу 1 байт) устанавливается по условию: Если значение u32divider > 255 (т.е. больше полного байта), то устанавливаем максимум = 255. Если значение u32divider находится в интервале от 4 до 255, то это значение устанавливаем, как оно есть. Если значение u32divider < 4, то устанавливаем 4. Такие выражения типичны, когда какую-то величину требуется обрезать с двух сторон (по максимуму и минимуму сразу). Например, э ... при начислении пенсий :) - если начислено выше потолка, то получаешь потолок; если начислено ниже прожиточного минимума, то получаешь прожиточный минимум; а если в промежутке, то получаешь сколько начислено. Вот и здесь 255 - потолок, а 4 - прожиточный миниммум. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 2 сентября, 2012 Опубликовано 2 сентября, 2012 · Жалоба http://ru.wikipedia.org/wiki/Тернарная_условная_операция http://khpi-iip.mipk.kharkiv.edu/library/pgm/kr/c_2.html#211 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadim_rt 0 3 сентября, 2012 Опубликовано 3 сентября, 2012 · Жалоба Спасибо за ответы, разобрался. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться