Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха. |
01.08.2018, 16:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Что-то я перестал понимать Си.
То-ли у меня крыша поехала от ковыряния STM32 , то-ли погода повлияла , но я запутался ...
Решил сегодня отвлечься и попробовать обновить в голове Си (бывает, что замыливается глаз, и если годами пишешь, то как-то некоторые тонкости ускользают , становятся неочевидными...) .... Решил " обновиться " по унарным операциям , как самым простейшим .
Набираю в гугеле Си унарные операции ...получаю ссылки .
Первая-же - Прелестная - то,что хотел - -,+,~ есть .
Унарный минус - зашибись. Я никогда не пользовался , даже не задумывался , а тут код одной программки ковырял - возникли вопросы , как это Действительно работает ..Прекрасно . (Не актуально , так как опять задумываться над знаковыми- беззнаковыми ... проще на минус единицу умножить- более наглядно, хоть видно что хоть осознанно делаешь )
Унарный плюс . Хммм. Забавная штуковина. В частности, говорящая НЕКОТОРЫМ компиляторам просто не оптимизировать скобки. При float очень полезно,если большие с малыми в одном операторе-выражении нужно в определённом порядке складывать умножать не теряя точность. Примем к сведению, тем более оказывается знал , но забылось. Принимается!! (Не актуально .. ради этого нужно все компиляторы в уме держать ...проще через промежуточные переменные сделать)
И ТУТ Я ПОПАЛ!!!! - в качестве примера выражение f=а*+(b*с) - которое расшифровывается как "будет гарантированно вычисляться следующим образом: результат сложения b и с будет прибавлен к а" ..
Чего я только не делал - все ссылки начал подряд просматривать...ВЕЗДЕ ,во всех подряд , с разными вариациями , в разной форме ИМЕННО ТАК расшифровывается это выражение .
Пока я в осадке.
Так-же как и с "~" оттуда-же ... short x=987 ; x=~x; значит x равняется -987.(я-бы согласился на -988 )
(Я понимаю откуда ноги растут ... но весь интернет этим заполнен - не могу не верить )
Последний раз редактировалось OlegNZH; 01.08.2018 в 17:49.
|
|
|
|
01.08.2018, 16:52
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
OlegNZH, я все эти непонятки обычно в пошаговом отладчике или ассемблерном листинге проверяю…
А там уже от результата никуда не денешься
Если вариант проверить на нескольких компиляторах под разные процессоры получится уже система…
К проверке можно будет несколько вариантов оптимизации добавить…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
01.08.2018, 17:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Сообщение от OlegNZH
|
ВЕЗДЕ ,во всех подряд , с разными вариациями , в разной форме ИМЕННО ТАК расшифровывается это выражение .
|
Ну так все друг у друга и переписывают, с реврайтингом, чтобы не пессемизировали поисковики, или без. А что переписывают - сами не понимают.
А в итоге - "Celebrate! Not celibate!"
|
|
|
|
01.08.2018, 17:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,360
Сказал спасибо: 85
Сказали Спасибо 619 раз(а) в 374 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Может отсканировано с бумажной книжки.
Но не объясняет -987 вместо -988.
Если только ручная правка затем кем-то не слишком задумчивым.
|
|
|
|
01.08.2018, 17:47
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
OlegNZH, в дополнение - таки стоило бы изначально прикоснуться к первоисточнику от Кернигана и Ритчи, а потом уже верить написанному в других местах сети. Потом можно прочитать материалы по реализации языка в документации по конкретному компилятору и среде.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
01.08.2018, 17:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Сообщение от pambaru
|
Может отсканировано с бумажной книжки.
Но не объясняет -987 вместо -988.
Если только ручная правка затем кем-то не слишком задумчивым.
|
Да нееее!!! Там этот пример был под номером 1 - т.е логично предположить
что к унарному минусу относился .. Так , что Тильда - это как-бы унарный минус должен был быть ... Они-же ПОХОЖИ!
PS Причём в одной из статей ТАМ ДЕЙСТВИТЕЛЬНО МИНУС!!!
PPS Но вместо тильды в следующем примере стоит ТОЖЕ МИНУС!
Последний раз редактировалось OlegNZH; 01.08.2018 в 18:47.
|
|
|
|
01.08.2018, 17:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Сообщение от mike-y-k
|
OlegNZH, в дополнение - таки стоило бы изначально прикоснуться к первоисточнику от Кернигана и Ритчи, а потом уже верить написанному в других местах сети. Потом можно прочитать материалы по реализации языка в документации по конкретному компилятору и среде.
|
Ув. mike . Тема называется - отвлекитесь , эмбеддеры!
|
|
|
|
01.08.2018, 18:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 28.02.2010
Сообщений: 2,297
Сказал спасибо: 53
Сказали Спасибо 461 раз(а) в 392 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Сообщение от mike-y-k
|
OlegNZH, в дополнение - таки стоило бы изначально прикоснуться к первоисточнику от Кернигана и Ритчи, а потом уже верить написанному в других местах сети. Потом можно прочитать материалы по реализации языка в документации по конкретному компилятору и среде.
|
Вопрос спорный ... Мне делать больше нечего? Как искать как конкретный компилятор относится к тому-же унарному плюсу? Мне проще по-раздельности перемножить . Да ...скорость упадёт , но если я вдруг код, учитывающий тонкости одного бездумно перенесу в другой , то неизвестно , что в итоге получится.
PS Тем более , что если речь идёт про float , где введённая лишняя переменная в быстродействии роли не сыграет(условно).
PPS Но вообще-то пост про другое ... Чему нас учат в инетах ... ( А всего-лишь , хотел за хлебушком сходить .. ...тьфу ...про унарные глянуть , чё пишут ..)
PPPS Что-бы не быть голословным - не поленился (скучно мне ) собрал эти самые первые ссылки , которые поисковики на "унарные " выдаёт , гди и фигурируют эти примеры ( и это на первых страницах поиска) )
http://wm-help.net/lib/b/book/180766606/68
http://mylektsii.ru/14-40261.html
https://it.wikireading.ru/35116
http://oplib.ru/informatika/view/224...arnye_operacii
https://studfiles.net/preview/1466535/page:30/
Последний раз редактировалось OlegNZH; 01.08.2018 в 18:51.
|
|
|
|
01.08.2018, 22:09
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,170
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
OlegNZH, отвлекаться можно по разному
А вот учиться в сети стоит с большой осторожностью - можно на внешне вполне вразумительные объяснения от апологетов свободной энергии нарваться…
Приведённые материалы вполне тянут на эрудицию и смекалку.
А уж если серьёзно - изучение нюансов матчасти только повышает качество, особенно в узких местах
После первой ссылки читать дальше не стал - испугался за величину смещения крыши , хотя там и говорится про особенности работы разных компиляторов для той записи…
С первоисточниками как-то сильно спокойнее.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
Последний раз редактировалось mike-y-k; 01.08.2018 в 22:14.
|
|
|
Сказали "Спасибо" mike-y-k
|
|
|
02.08.2018, 14:03
|
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Что-то я перестал понимать Си.
Выдержка из библии Кенигана и Ричи. Язык Си.
Цитата:
|
15.2. Унарные операции
Выражение с унарными операциями группируется справо на-
лево.
Унарное-выражение:
* выражение
& L-значение
- выражение
! Выражение
\^ выражение
++ L-значение
-- L-значение
L-значение ++
L-значение --
(имя-типа) выражение
SIZEOF выражение
SIZEOF имя-типа
Унарная операция * означает косвенную адресацию: выраже-
ние должно быть указателем, а результатом является L-значе-
ние, ссылающееся на тот объект, на который указывает выраже-
ние. Если типом выражения является "указатель на...", то ти-
пом результата будет "...".
Результатом унарной операции & является указатель на
объект, к которому ссылается L-значение. Если L-значение
имеет тип "...", то типом результата будет "указатель на
...".
Результатом унарной операции - (минус) является ее опе-
ранд, взятый с противоположным знаком. Для величины типа
UNSIGNED результат получается вычитанием ее значения из 2**N
(два в степени N), где N-число битов в INT. Унарной операции
+ (плюс) не существует.
|
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:03.
|
|