Страница 1 из 2
Расшифровка код
Добавлено: Пн сен 30, 2013 09:55:52
СергейКир
Здравствуйте.
AVR studio 6 - СИ - Mega8.
Вопрос по языку Си (начал недавно изучать).
Пишу свою прошивку. Учусь на примерах.
В одном из примеров написано так
Код: Выделить всё
uint8_t cmd;
//....
// функция get_byte возвращает полученный байт
if(!get_byte(&cmd)) {
// то, событие A
}
Вопрос. Объясните пожалуйста, логику оператора IF.
Т.е, что должно произойти конкретно в моём случае, чтобы произошло событие А.
Сам не могу собрать логическую цепочку.
Спасибо заранее.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 10:32:27
Аlex
Объясните пожалуйста, логику оператора IF
Блин, ровно 10 секунд понадобилось, чтобы найти нужную информацию -
http://proggrammer.ru/46-uslovnyy-operator-if-v-si.html Дольше пост писал.
Неужели сложно воспользоваться поисковиком ?
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 10:47:23
СергейКир
Поисковик? Не сложно, и не нужно. Что значит IF, я прекрасно понимаю.
Я просил помощи в расшифровке моего условия.
Например вот так:
ЭТО ЗНАЧИТ: если b меньше 10 то...
Как прочитать моё условие, учитывая ! и &?
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 10:50:40
Аlex
и не нужно
Ну-ну...
Что значит IF, я прекрасно понимаю
Откуда тогда возникают такие вопросы:
Как прочитать моё условие?
?
Что не понятно Вам в этом условии ?
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 10:57:23
СергейКир
Дождался. Началось давление на новичка.
Сам виноват.
Вот Вы тоже "дольше мне отвечаете", вместо того, чтобы взять и помочь, если конечно охота Вам.
Вижу у Вас медаль есть ). Наверное мне нужен, кто-то попроще.
Подожду, может кто-то недавно был новичком, но стал опытным и поможет мне.
Но за участие Вам спасибо.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:02:38
Kavka
Если выражение в условной части оператора if имеет числовой вид, то оно толкуется как ложь, если число равно 0, иначе как истина. (Это, так сказать частный случай.)
В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}
СергейКир, не серчайте на обитателей. Ознакомьтесь с вот
этим - поймёте почему такая реакция.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:04:30
Аlex
Подожду, может кто-то .... и поможет мне
Для начала, нужно понять, чем Вам помочь. А это сделать очень трудно, учитывая Ваши малоинформативные вопросы.
Вам задают наводящие вопросы, пытаясь вытянуть из Вас информацию, но Вы расцениваете это как давление. Это нужно не нам, а Вам.
Kavka писал(а):Ознакомьтесь с вот
этим - поймёте почему такая реакция.
Отличная ссылочка. Только вот те, кого посылают по ней, увидев название статьи, с обидой закрывают страничку. А зря...

Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:04:52
dosikus
СергейКир писал(а):Дождался. Началось давление на новичка.
Чем юродствовать лучше читать.
Достаточно знать что в Cи все что не 0 Истина( True ) и что условия оперируют только с логическими выражениями.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:13:00
Аlex
Kavka писал(а):Если выражение в условной части оператора if имеет числовой вид, то оно толкуется как ложь, если число равно 0, иначе как истина. (Это, так сказать частный случай.)
В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}
Жаль, что это всё написано за зря, собственно, как и это :
dosikus писал(а):Достаточно знать что в Cи все что не 0 Истина( True ) и что условия оперируют только с логическими выражениями.
Ведь ТС прекрасно понимает оператор IF.
Только вот не понятно, что ему не понятно

Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:24:22
СергейКир
Kavka писал(а):
В данном случае, get_byte возвращает байт. К нему применяется логический оператор отрицания (инверсии). Число в логическом операторе рассматривается так же как описано строчкой выше.
Можно записать в эквивалентном виде: if ( get_byte(&cmd) == 0 ) {}
Спасибо всем, отдельно Kavka.
С этим
http://bugtraq.ru/forum/faq/general/sma ... tions.html ознакомился. Буду придерживаться.
P.S. Представьте, если бы мне первым ответил Kavka. Тема уместилась бы в два сообщения - Моё и Kavka(и).
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 11:46:36
Аlex
отдельно Kavka
Поставил ему плюсик за обладание экстрасенсорными способностями

И всё таки, задам принципиально-интересующий меня вопрос, который не даст мне уснуть

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

Re: Расшифровка код
Добавлено: Пн сен 30, 2013 12:20:18
ibiza11
Приветствую новичка. Вам нужно ознакомиться с понятием "функция" , как передать ей параметры, способы её вызова и как она возвращает результат. А ещё то, что знак & поставленный перед именем означает "взятие адреса".
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 12:23:37
СергейКир
ibiza11 писал(а):знак & поставленный перед именем означает "взятие адреса".
Спасибо и Вам.
Я ведь и не спорю, что мне не хватает теории. Про функции уже прочитал. Ищу про "взятие адреса".
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 12:35:24
dosikus
СергейКир писал(а):
P.S. Представьте, если бы мне первым ответил Kavka. Тема уместилась бы в два сообщения - Моё и Kavka(и).
"На встречу со звездой надо приходить подготовленным" (с)
Вам не проще почитать K&R ?
Судя по вашим репликам это не последний ваш тупик ...
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 12:42:32
СергейКир
dosikus писал(а):
это не последний ваш тупик ...
Это не тупик! Это крутая гора. Ползу. Но в горах без страховки ни как.
Страховка это все вы.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 12:58:35
ibiza11
Полностью поддерживаю мнение dosikus! лучше прочитать Керниган & Ритчи - Язык программирования Си. Такие вопросы сразу отпадут. Прочитайте полностью, потом, если что-то непонятно будет - задавайте вопрос.
Re: Расшифровка код
Добавлено: Пн сен 30, 2013 13:07:02
Аlex
Допустим get_byte возвращает мне (0b01010101). Что с ним происходит дальше?
Дальше это значение является выражением в условии

Выходит, написав
Это я понимал(ю).
, Вы слукавили

Иначе, если бы Вас интересовало что такое
get_byte и что за таинственные записи у неё в скобках, Вы бы по комментарию выше поняли что это такое и вбили бы в поисковик "функции Си". На что получили бы целую кучу и маленьку тележку информации, которую тут переписывать возьмутся только люди с крепкими нервами и железным терпением
СергейКир писал(а):Надеюсь Вы будете спать хорошо

Ладно хоть не "спокойно" написали
Спасибо за предоставленный мне крепкий сон, вывод я сделал = Вы - лентяй

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

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