Расшифровка код

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Здравствуйте.
AVR studio 6 - СИ - Mega8.
Вопрос по языку Си (начал недавно изучать).
Пишу свою прошивку. Учусь на примерах.
В одном из примеров написано так

Код: Выделить всё

uint8_t cmd;
//....
// функция get_byte возвращает полученный байт

if(!get_byte(&cmd)) {
 // то, событие A
}
Вопрос. Объясните пожалуйста, логику оператора IF.
Т.е, что должно произойти конкретно в моём случае, чтобы произошло событие А.
Сам не могу собрать логическую цепочку.
Спасибо заранее.
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Объясните пожалуйста, логику оператора IF
Блин, ровно 10 секунд понадобилось, чтобы найти нужную информацию - http://proggrammer.ru/46-uslovnyy-operator-if-v-si.html Дольше пост писал.
Неужели сложно воспользоваться поисковиком ?
Реклама
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Поисковик? Не сложно, и не нужно. Что значит IF, я прекрасно понимаю.
Я просил помощи в расшифровке моего условия.
Например вот так:

Код: Выделить всё

if(b<10) {
}
ЭТО ЗНАЧИТ: если b меньше 10 то...
Как прочитать моё условие, учитывая ! и &?

Код: Выделить всё

if(!get_byte(&cmd)) {
 // то, событие A
}
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

и не нужно
Ну-ну... :))
Что значит IF, я прекрасно понимаю
Откуда тогда возникают такие вопросы:
Как прочитать моё условие?
?
Что не понятно Вам в этом условии ?
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Дождался. Началось давление на новичка.
Сам виноват.
Вот Вы тоже "дольше мне отвечаете", вместо того, чтобы взять и помочь, если конечно охота Вам.
Вижу у Вас медаль есть ). Наверное мне нужен, кто-то попроще.
Подожду, может кто-то недавно был новичком, но стал опытным и поможет мне.
Но за участие Вам спасибо.
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Если выражение в условной части оператора if имеет числовой вид, то оно толкуется как ложь, если число равно 0, иначе как истина. (Это, так сказать частный случай.)
В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}

СергейКир, не серчайте на обитателей. Ознакомьтесь с вот этим - поймёте почему такая реакция.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Подожду, может кто-то .... и поможет мне
Для начала, нужно понять, чем Вам помочь. А это сделать очень трудно, учитывая Ваши малоинформативные вопросы.
Вам задают наводящие вопросы, пытаясь вытянуть из Вас информацию, но Вы расцениваете это как давление. Это нужно не нам, а Вам.
Kavka писал(а):Ознакомьтесь с вот этим - поймёте почему такая реакция.
Отличная ссылочка. Только вот те, кого посылают по ней, увидев название статьи, с обидой закрывают страничку. А зря... :(
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

СергейКир писал(а):Дождался. Началось давление на новичка.
Чем юродствовать лучше читать.
Достаточно знать что в Cи все что не 0 Истина( True ) и что условия оперируют только с логическими выражениями.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Kavka писал(а):Если выражение в условной части оператора if имеет числовой вид, то оно толкуется как ложь, если число равно 0, иначе как истина. (Это, так сказать частный случай.)
В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}
Жаль, что это всё написано за зря, собственно, как и это :
dosikus писал(а):Достаточно знать что в Cи все что не 0 Истина( True ) и что условия оперируют только с логическими выражениями.
Ведь ТС прекрасно понимает оператор IF.
Только вот не понятно, что ему не понятно :(
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Kavka писал(а): В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}
Спасибо всем, отдельно Kavka.
С этим http://bugtraq.ru/forum/faq/general/sma ... tions.html ознакомился. Буду придерживаться.
P.S. Представьте, если бы мне первым ответил Kavka. Тема уместилась бы в два сообщения - Моё и Kavka(и).
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

отдельно Kavka
Поставил ему плюсик за обладание экстрасенсорными способностями :)
И всё таки, задам принципиально-интересующий меня вопрос, который не даст мне уснуть :)) Что Вам было не понятно и что Вы подчерпнули для себя из ответов выше ? То, что в Си false - нулевое значение, а true - значение, отличное от нуля ?
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Аlex писал(а): Что Вам было не понятно? То, что в Си false - нулевое значение, а true - значение, отличное от нуля ?
Это я понимал(ю). Не понятно было (и всё ещё не до конца) вот что:
Допустим get_byte возвращает мне (0b01010101). Что с ним происходит дальше?
Записываю его в переменную cmd? Т.е. get_byte(&cmd) - это присвоение значения переменной cmd? Что здесь значит "&"?
Дальше логическое НЕ (!). А дальше запутываюсь. Но "экстрасенс" дал мне направление. Рисую схемки на бумажке, разбираюсь.
Надеюсь Вы будете спать хорошо :)
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Приветствую новичка. Вам нужно ознакомиться с понятием "функция" , как передать ей параметры, способы её вызова и как она возвращает результат. А ещё то, что знак & поставленный перед именем означает "взятие адреса".
Ставим плюсы: )
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

ibiza11 писал(а):знак & поставленный перед именем означает "взятие адреса".
Спасибо и Вам.
Я ведь и не спорю, что мне не хватает теории. Про функции уже прочитал. Ищу про "взятие адреса".
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

СергейКир писал(а): P.S. Представьте, если бы мне первым ответил Kavka. Тема уместилась бы в два сообщения - Моё и Kavka(и).
"На встречу со звездой надо приходить подготовленным" (с) :)))
Вам не проще почитать K&R ?
Судя по вашим репликам это не последний ваш тупик ...
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

dosikus писал(а): это не последний ваш тупик ...
Это не тупик! Это крутая гора. Ползу. Но в горах без страховки ни как.
Страховка это все вы.
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

Полностью поддерживаю мнение dosikus! лучше прочитать Керниган & Ритчи - Язык программирования Си. Такие вопросы сразу отпадут. Прочитайте полностью, потом, если что-то непонятно будет - задавайте вопрос.
Ставим плюсы: )
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Допустим get_byte возвращает мне (0b01010101). Что с ним происходит дальше?
Дальше это значение является выражением в условии :)
Выходит, написав
Это я понимал(ю).
, Вы слукавили :) Иначе, если бы Вас интересовало что такое get_byte и что за таинственные записи у неё в скобках, Вы бы по комментарию выше поняли что это такое и вбили бы в поисковик "функции Си". На что получили бы целую кучу и маленьку тележку информации, которую тут переписывать возьмутся только люди с крепкими нервами и железным терпением :)
СергейКир писал(а):Надеюсь Вы будете спать хорошо :)
Ладно хоть не "спокойно" написали :)))
Спасибо за предоставленный мне крепкий сон, вывод я сделал = Вы - лентяй :)
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

ibiza11 писал(а): лучше прочитать Керниган & Ритчи - Язык программирования Си
Согласен - "лучше прочитать", и буду читать!
Но, представьте вы собрались сделать самодельный гидравлический манипулятор. Задаёте на соответствующем форуме вопрос:
"Уважаемые... Подскажите пожалуйста, формулу для расчёта усилия гидроцилиндра". А вам в ответ:
"Сначала полностью прочитайте "Гидравлика и аэродинамика, Альтшуль А.Д., Киселев П.Г.", так будет лучше".
Хотя сама формула состоит из 10 знаков. Такие дела.
Вот сказали мне, что "&" в моём случае - это взятие адреса и всё, туман начинает рассеиваться, читаю, вникаю.
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Аlex писал(а):Вы - лентяй :)
Умеете Вы подзадорить, пробудить здоровое возмущение. Вы наверное "немножко" психолог.
Местами мы все лентяи. Однако, как бы меня тут не называли, (м)учили, я не спеша добиваюсь своего.
Всё встаёт на свои места в моей головоломке (уже без лукавства).
P.S. Нужно назвать человека дураком, чтобы он собрался с силами и доказал СЕБЕ, что он ( ! ДУРАК )
Ответить

Вернуться в «AVR»