Перейти к содержанию
    

В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки.
видимо, он вместо if(a) использует if(!!a). тогда понятно, почему !! вместо !

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Читал две книжки, не считая каких-то еще при социализме изданных - K&R и Шилдта. Ни там, ни там такого 5[a] не написано. Наверное, не без причин.

надо у Страуструпа посмотреть, но тоже не помню такого

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Раньше я даже в ... нетрезвом виде не допускал, что такое возможно. Не знал.
все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям.

Мне кажется, что всю эту цитату мог бы сказать и igorle. :biggrin: :beer:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется, что всю эту цитату мог бы сказать и igorle. :biggrin: :beer:

 

а он и сказал, только по-своему. когда упомянул, что ! его заставляет задуматься. т.е. первый посыл у нас был одинаков, но вот направления дальнейшего мышления - разный. его потянуло в область, как подогнать под стандарт то, что вызывает сомнения, а я сразу сказал, что это НЕ ЛОГИЧНО, и просто не стал подгонять, а стал об этом говорить другим. не логично называть результат арифметического выражения логическим, не логично превращать его всякими шаманскими средствами в логическое, нелогично смешивать арифметику с логикой... но есть лазейка: стандарт позволяет, и логика сразу отключается (извините за тавталогию).

 

 

никто ведь даже не видит этой НЕЛОГИЧНОСТИ, как я ни пытался ее показать.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я искренне рад, что неожиданно вспыхнувший флейм закончился впорлне миролюбиво, и позволил всем участникам (в том числе и мне) расширить как диапазон познаний, так и диапазон терпимости.

Может быть вообще закрыть эту тему? От греха подальше. Слишком общая она. "Весь Си в одном флаконе"

 

Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму.

Да, конечно отрицание, а не инверсию. Как уже говорили - скомпилированный код будет одинаковый. А ставить один или два восклицательных знака - дело привычки. Не более того. Как я уже говорил - для меня !! означает кастинг к булевому типу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я вот что хочу сказать. Если общий проект написан в стиле !!, то и придерживаться нужно подобного стиля. Если в стиле "понятный", то в таком

Знать возможности и применять их - это только на усмотрение в конкретной ситуации

igorle, не мы начинали тему, но все уже 16 листов читать познавательно. Зачем закрывать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вообще приём с двойным восклицательным знаком красивый. Возьму, пожалуй, на вооружение. Как идиому.

Напомнил мне, по аналогии, одно схемотехническое ухищрение, тоже нестандартное: выделение модуля сигнала посредством одностороннего насыщения усилителя за счёт однополярности питания. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая.

Для расширения кругозора можно сделать вот так:

с=(!a + !b) & 0x1;

А кто сказал что будет применена операция остаток от деления?

Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами

X % N^2

к

X & (N^2 - 1)

И это всем давно известно и используется абсолютно обыденно.

 

Ведь вижу запись, выглядящую абсурдно. Вот Вы тоже: прочтите её вслух, а затем тоже сделайте выводы. Не смешно? Только честно.
Абсолютно честно никакого абсурда.

Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда.

Почему вы сначала изучали законы Кирхгофа, а только потом приступили к схемотехнике?

А тут позволяете себе не зная стандарта (читай законов Кирхгофа) давать Коментарии подобного рода?

Вот в этом я вижу абсурд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Никакого абсурда. Почему вы сначала изучали законы Киргофа, а только потом приступили к схемотехнике?

А тут позволяете себе не зная стандарта (читай законов Киргофа) давать Коментарии подобного рода?

потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Законы Кирхгофа основаны на законах математики (и физики) и выводятся строго на логической базе этих наук, поэтому эти законы выглядят красиво, логично и спорить с ними бесполезно. а стандарт, родившийся просто из головы человека, может быть оспариваем. хотя бы частично. это не закон природы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это не закон природы.
Вам уже давно пора уняться и перейти от законов природы к законам Божьим....

Возможно будет гораздо больше пользы...

Мы сейчас программируем на Си. У этого языка есть правила и законы (стандарт).

О чём ещё можно говорить???

Напишите свой собственный язык и только тогда втирайте очки окружающим!

потому что еще раньше изучили математику
А ещё раньше ходить на горшок! И что? Мои дети закончили этот этап.

Повторюсь, есть стандарт - его утверждал и редактировал не один и не 2 и даже не 10 человек.

А тут появился пуп земли и ему не нравится. Не нравится - не ешь!

Или вы настолько умны, что считаете себе возможным давать рекомендации - читай изобретать новый стандарт поверх имеющегося?

Я поражён вашим тупым упорством. Вы ничего не можете изменить в сложившейся ситуации и учиться вам тоже видимо лень.

Вам остаётся одно - идти в депутаты и с высокой арены поливать потоком мутного сознания окружающих. Прощайте!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прощайте!
неужели я вас довел до суицида?! :rolleyes: я не опровергаю стандарты, даже не призываю их пересматривать. это вы усматриваете в моих словах посягательство на святое. я ратую за приведение программ в соответствие со здравым смыслом без противоречий со стадартом. что в этом не так? или важнее именно отсутствие здравого смысла в коде?

 

 

:bb-offtopic: а если помечтать: вот стал я депутатом какого-нибудь европарламента и добился пересмотра стандарта Си. уже на следующий день вы станете с не меньшим упорством перекрещивть какого-нибудь igorle в новую веру? ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

XVR, вы, пожалуйста, сообщите ВЕСЬ размер кода, потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат, а вот общий размер, который включает в том числе подготовительные действия по вызову функций, оказался совсем иным.
А вот это странно. Если меняется только вызов, то разницы в размере вообще быть не должно, т.к. соглашения о вызовах функций не зависит от их содержимого.

Сделал main с вызовом var1/var2 в отдельном файле:

typedef char boo;

boo var1(boo x, boo y);
boo var2(boo x, boo y);

int main()
{
return var1(1,2);
}

Результат - размер exe 9114 байт вне зависимости от вызываемой функции. (gcc 4.7.2)

Разрезание функций var1 и var2 на 1 разных файла и линковка только с одним из них (что бы неиспользуемая функция вообще не попала в выход) дала - по 1му варианту (с && и ||) -9037 байт, по второму ( ^ ) - 9006

 

Помещение всех функций в один файл и добавление static к var1/var2 дала 8876 для обоих вариантов. Ассемблер последнего случая -

main:
.LFB2:
        .cfi_startproc
        xorl    %eax, %eax
        ret
        .cfi_endproc

т.е. компилятор вообще все выкинул :rolleyes:

 

потому как даже под WinAVR в моем варианте ассемблерный листинг функций давал ВАШ результат,
А вот это непонятно, почему тогда конечный результат получился прямо противоположный?

который включает в том числе подготовительные действия по вызову функций,
У функций одинаковый прототип, почему тогда отличаются 'подготовительные действия по вызову функций'?

 

что касается взгляда на логику, то по-моему, двух мнений тут быть не может: операция ^ арифметическая битовая, операция ! -логическая. в одном выражении смешаны два вида операций.
Еще раз, медленно и печально - в С НЕТ РАЗЛИЧИЯ между логическими и арифметическими операциями. И чем быстрее вы (или кто угодно) к этому привыкнет, тем будет лучше.

 

мой вариант как раз и отражает суть булевой алгебры преобразования логических функций - помните это? в моем варианте записи все сделано как раз в строгом соответствии с этим, и ни один пункт стандарта Си не нарушен - два плюса против одного вашего :)
Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона.

 

Представьте себе - лето, пляж, люди загорают и купаются. Тут на пляже появляется человек в строгом черном костюме и с портфелем, и начинает громко возмущаться, что народ совсем совесть потерял, и в таком людном общественном месте находятся в практически голом виде, что идет в разрез со всеми нормами поведения в приличном обществе. Ничего не напоминает? :laughing:

 

я бы мог сделать опрос, но в своей формулировке: какая из этих конструкций более соответствует здравому смыслу?
Сделайте, только не забудьте упомянуть, что это все же программа на С, а не абстрактная математическая запись

 

я ведь не о Си пекусь, а том, как писать программы в соответствии со здравым смыслом,
У вас какой то не тот 'здравый смысл'.

 

Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С. В Pascal'е действительно логические выражения не являются полноценными выражениями, и используются исключительно в условных операторах. В С это не так, привыкайте, и не пытайтесь всех переучить с С на Pascal - это нереально :rolleyes:

 

Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого -

#define begin {
#define end }

Но через несколько месяцев это прошло :1111493779:

 

Я еще помню свои собственные впечатления, когда перешел с Pascal на С, а потом пришлось один проект снова сделать в Pascal'е - было такое впечатление, что на меня надели смирительную рубашку и приковали цепью к компьютеру :laughing:

 

P.S. а что этоу вас за опкод какой-то странный в первом листинге второго варианта - rep? вроде как это префикс-повторитель, и тут он как бы неуместен...
Это ret с префиксом rep. Зачем тут префикс - один gcc знает :biggrin:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Знаете, ARV, я по началу думал что вы нас тролите. Но потом оценил количество написаного, и решил, что скорее всего вы искренни.

 

Так что давайте так.

 

Если вы толстый троль - то поздравляю, вам удалось сделать вброс в вентилятор. Равнодушных не осталось

Если вы пишете искренне - я сделаю еще одну попытку.

 

Вот смотрите, Herz пришел в эту ветку недавно. И хотя он позиционирует себя как электронщик, а не как программист, он прошел путь от возмущения до восхищения двумя восклицательными знаками всего за один день. 25-го он назвал это абсурдом, 26-го сказал, что примет на вооружение. Это обычный путь думающих и развивающихся людей.

 

Я, вообще-то, программист, который решил расширить область знаний в сторону электроники. Что бы мне не отвечали на мои вопросы по электронике, я пытаюсь понять, а не оспорить. В раздел программирования пошел только за тем, чтобы попытаться чем-то отплатить форуму. Но глядя на результаты своего участия здесь, уже не уверен что стоило начинать. Когда (если) вы, ARV, ответите на мои вопросы про электронике, я попытаюсь их понять, но не оспорить.

 

Кто вы в первую очередь? Электронщик - тогда учитесь программировать. Программист? Тогда зачем Вам тратить драгоценные силы на споры с электронищками о программировании?

Поскольку у Вас свой путь в истории, то предлагаю

 

потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу.

Будьте последовательны.

Стандарт предусматривает запись типа

x = x + 10

С математической точки зрения это полная ерунда, так как не может быть верно ни при каких значениях x

Добейтесь признания сообщества, что так писать нельзя.

 

Затем:

Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами
X % N^2

к

X & (N^2 - 1)

Видите, какие умные компиляторы стали? А Вы код компилятора видели? Я пытался понять один кусочек кода GCC (подозревал, что там есть баг) и не понял ничего :( Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж.

Так вот, вместо того, чтобы тратить свои душевные силы на нас, недалеких, идите на форумы, где тусуются авторы GCC и откройте глаза им на то, как правильно писать код.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого -

#define begin {
#define end }

Но через несколько месяцев это прошло

А я, когда взялся за Verilog, хотел было сделать обратное

#define { begin
#define } end

Но это невозможно принципиально.

 

Мне как раз нравится лаконичность языка C.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...