Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Си
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Страницы: 1, 2, 3, 4, 5, 6
igorle
Цитата(dxp @ Mar 24 2013, 11:20) *
Согласился бы с более мягкой формулировкой: "...использовать это в реальных программах настоятельной необходимости нет". Потому что, иногда такая запись, имхо, лучше акцентирует замысел. Например, есть несколько массивов, и надо пройтись по энному - скажем, пятому - элементу всех массивов:

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


Цитата(ViKo @ Mar 24 2013, 11:47) *
... получаем *(5+a). А дальше? "Еще нежнее..."


Инкремент указателя сдвигает указатель на следующий элемент массива.
Написав a[5], мы говорим сложи a и 5, и верни нам значение, которое хранится в полученом адресе
Написав 5[a], мы говорим сложи 5 и a, и верни нам значение, которое хранится в полученом адресе

Поскольку 5+a и a+5 дают одинаковый результат, то и получается, что конструкции эквивалентны.
ViKo
Цитата(igorle @ Mar 24 2013, 12:00) *
Написав a[5], мы говорим сложи a и 5, и верни нам значение, которое хранится в полученом адресе
Написав 5[a], мы говорим сложи 5 и a, и верни нам значение, которое хранится в полученом адресе

Да, так понятно. И понятно, что так вычисляется при работе компилятора. Непонятно, почему это допускается, ради простоты реализации? Ведь a[] - это массив, а 5[] - бред. Можно задать массив a[5], но нельзя задать 5[a]. Это - что-то, именуемое "хаком".
Таким образом, задать 5[a] нельзя, а использовать можно. И где логика? sm.gif
P.S. начинаю относиться к K & R, как к шарлатанам. sm.gif
igorle
Цитата(ViKo @ Mar 24 2013, 12:08) *
Да, так понятно. И понятно, что так вычисляется при работе компилятора. Непонятно, почему это допускается, ради простоты реализации? Ведь a[] - это массив, а 5[] - бред. Можно задать массив a[5], но нельзя задать 5[a]. Это - что-то, именуемое "хаком".
Таким образом, задать 5[a] нельзя, а использовать можно. И где логика? sm.gif
P.S. начинаю относиться к K & R, как к шарлатанам. sm.gif

Исходный код делится на "кирпичики". Оператор "[]" при использовании описывается где-то так:
операнды должны быть один - типа поинтер, другой - целое
Сложить операнды. (результатом будет поинтер)
выполнить опрацию разыменовывания.

Это логика, но отнюдь не шарлатанство. Объявление переменной и применение переменной - разные вещи.
Вас не смущает, что звездочка может означать и умножение, и указатель, и разыменовывание в зависимости от контекста.

Кстати, недостаток логики повергает многих в задумчивость, когда просишь сказать чему равен (-11)%10. А у классиков здесь все четко и просто.


Цитата
...Ведь a[] - это массив, а 5[] - бред...

Ээээ. Дело привычки.
Вспомнил, как давным давно (а я весьма стар), когда мы начинали изучать программирование, мой однокурсник возмущался, что нельзя писать x=x+10, потому что это бред и не может быть верным ни при каком значении x biggrin.gif
Уже сегодня вечером вы, не задумываясь, будете думать
Ведь a[] - это массив, а 5[] - это шестой элемент массива.
ViKo
Цитата(igorle @ Mar 24 2013, 12:35) *
Вас не смущает, что звездочка может означать и умножение, и указатель, и разыменовывание в зависимости от контекста.

Не смущало. Но, после прочтения данной темы, возникла мысль - а почему для взятия адреса не использовали, например, символ @. @a - красота.

Цитата(igorle @ Mar 24 2013, 12:35) *
Кстати, недостаток логики повергает многих в задумчивость, когда просишь сказать чему равен (-11)%10. А у классиков здесь все четко и просто.

Цитирую классиков K&R, 2-е издание, белая, с синей буквой C, стр. 55
Цитата
Направление округления при операции / или знак результата при операции % для отрицательных аргументов зависят от системы...

Так чему равен результат? sm.gif Боюсь ошибиться, 1? -1?

Цитата(igorle @ Mar 24 2013, 12:35) *
Уже сегодня вечером вы, не задумываясь, будете думать
Ведь a[] - это массив, а 5[] - это шестой элемент массива.

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

Цитата(igorle @ Mar 24 2013, 12:35) *
операнды должны быть один - типа поинтер, другой - целое
Сложить операнды. (результатом будет поинтер)

И чему равен поинтер на 5? rolleyes.gif
igorle
Цитата(ViKo @ Mar 24 2013, 13:40) *
Цитирую классиков K&R, 2-е издание, белая, с синей буквой C, стр. 55

Вот видите как полезно читать классиков. Суть в том, что сумма результата деления умноженного на делитель и остатка от деления дают исходное число. Таким образом результат будет или -1, или 9. В зависимости от платформы. Кстати, мне пока не попадалась платформа, где округление для отрицательных чисел шло в минус. В смысле -11/10 может на рекоторых платформах давать -2. Тогда остаток от деления будет 9. Но на всех платформах, где я проверял, результат от деления был -1, соответственно остаток от деления - тоже -1.

Цитата(ViKo @ Mar 24 2013, 13:40) *
И чему равен поинтер на 5? rolleyes.gif

5 - это не указатель. Это целое. Которое будет складываться с указателем.
ARV
Цитата(igorle @ Mar 24 2013, 12:06) *
Вот смотрите до чего вы докатились. Вы уже говорите о знаниях как о бацилле. Приравняли ЗНАНИЯ к ЧУМЕ. Средневековье какое-то. Завтра вы начнете книгу K&R жечь на кострах.
как раз наоборот, это вы дальше сказанного К&R не желаете категорически поглядеть, это вы современные инквизиторы, готовые ради догмы закопать кого угодно!

я показал нонсенс, когда ЛОГИЧЕСКИЕ операции делаются АРИФМЕТИЧЕСКИМИ операторами, причем для этого используется еще и ЛОГИЧЕСКАЯ операция. получается каша, названная красивым подходом. это по ВАШЕЙ догме. я предложил не путать теплое с мягким, и в ЛОГИЧЕСКИХ ВЫРАЖЕНИЯХ пользоваться ЛОГИЧЕСКИМИ операторами - это хоть и не выходит за рамки канонов, но почему-то вас возмутило со страшной силой.


спустя некоторое время появляются люди, которые ОБОСНОВЫВАЮТ лучшим отражением ИДЕИ использование странных записей, и их слова все воспринимают "положительно". вопрос знатокам: почему, когда я предлагаю записывать выражения так, чтобы они лучше отражали суть, все поднимают меня на вилы?! ответ один - догма есть догма, а кто не с нею, тот против всех.

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

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

объявив обычный многомерный массив, вы не сделали ничего такого, что сделает запись a[n][5] менее понятной - взяли 5-й элемент n-го массива. гораздо больше пользы в понимании закладываемого смысла сыграло бы нормальное поименование массивов и т.п.

я привел реальный пример, что стремление к извращениям в кодировании приводит к ухудшению результатов - почему никто не среагировал? может у кого есть возможность протестировать аналогичный пример для ARMов - это принесло бы больше пользы в поднятом вопросе, чем все эти бредни про 5[a]...

Цитата(igorle @ Mar 24 2013, 13:35) *
Вас не смущает, что звездочка может означать и умножение, и указатель, и разыменовывание в зависимости от контекста.
меня смущает. я вижу в этом одно из самых слабых мест Си - контекстнозависимая неоднозначность символов
demiurg_spb
Цитата(ARV @ Mar 24 2013, 08:56) *
компилируем WinAVR 20100110
Вы бы ещё чего пораритетнее нашли...
WinAVR почил 3 года назад. Так и будете его всю жизнь в пример ставить?
Покажите как это сейчас выглядит например на gcc-(4.7.2 ... 4.8.0).
И если не понравится результат, так заполните баг репорт и хоть как-то помогите развитию продукта вместо пустого хая.
Или страшно? Профессионал млин...
ARV
Цитата(demiurg_spb @ Mar 25 2013, 09:51) *
Вы бы ещё чего пораритетнее нашли...
WinAVR почил 3 года назад. Так и будете его всю жизнь в пример ставить? Покажите как это сейчас выглядит (на gcc-(4.7.2 ... 4.8.0).
почил или нет, а я пользуюсь, и пока не сожалею. у вас есть свежак - вот вы и покажите, как стало хорошо и оптимально компилироваться то, что противоречит логике, об этом я и попросил
XVR
Цитата(ARV @ Mar 24 2013, 08:56) *
успехов вам в лаконизме! wink.gif
Давайте возьмем другой проц, и уровень оптимизаций побольше
Код
typedef char boo;

boo var1(boo x, boo y){
   return (!x && y) || (x && !y);
}

boo var2(boo x, boo y){
   return !x ^ !y;
}

Компилим gcc -O3 (версия gcc - gcc (GCC) 4.1.2 20070115 (SUSE Linux))
Платформа x64 -
Код
var1:
.LFB2:
        testb   %dil, %dil
        movl    %edi, %edx
        movl    %esi, %ecx
        jne     .L2
        testb   %sil, %sil
        movl    $1, %eax
        je      .L2
        rep; ret
        .p2align 4,,7
.L2:
        testb   %dl, %dl
        setne   %al
        testb   %cl, %cl
        sete    %dl
        andl    %edx, %eax
        movzbl  %al, %eax
        ret
.LFE2:

var2:
.LFB3:
        testb   %dil, %dil
        sete    %al
        testb   %sil, %sil
        sete    %dl
        xorl    %edx, %eax
        movsbl  %al,%eax
        ret
.LFE3:

Разницу в количестве команд видите?

Если собрать под 32 бита (в x86) - то получается то же самое
Код
var1:
        pushl   %ebp
        movl    %esp, %ebp
        movzbl  8(%ebp), %edx
        movzbl  12(%ebp), %ecx
        testb   %dl, %dl
        jne     .L2
        testb   %cl, %cl
        movl    $1, %eax
        je      .L2
        popl    %ebp
        ret
        .p2align 4,,7
.L2:
        testb   %dl, %dl
        setne   %al
        testb   %cl, %cl
        sete    %dl
        popl    %ebp
        andl    %edx, %eax
        movzbl  %al, %eax
        ret

var2:
        pushl   %ebp
        movl    %esp, %ebp
        cmpb    $0, 8(%ebp)
        sete    %al
        cmpb    $0, 12(%ebp)
        popl    %ebp
        sete    %dl
        xorl    %edx, %eax
        movsbl  %al,%eax
        ret


Цитата
спустя некоторое время появляются люди, которые ОБОСНОВЫВАЮТ лучшим отражением ИДЕИ использование странных записей, и их слова все воспринимают "положительно". вопрос знатокам: почему, когда я предлагаю записывать выражения так, чтобы они лучше отражали суть, все поднимают меня на вилы?! ответ один - догма есть догма, а кто не с нею, тот против всех.
Ответ неверный. 'лучше отражали суть' именно оригинал, а не ваш вариант. И 'странной записью' выглядит именно ваш вариант. А вы это упрямо игнорируете и с не меньшим упорством ищете заговор и догматиков.

В общем как говорится 'на вкус и цвет товарищей нет'. У каждого может быть свой собственный взгляд на то, что наиболее естественно и правильно. Если хотите установить истину - сделайте опрос, какая версия этой конструкции покажется читателям более естественной rolleyes.gif

PS. Собрал ваш тест на 4.7.2 (64 бита)
Код
var1:
.LFB0:
        .cfi_startproc
        testb   %sil, %sil
        jne     .L11
.L5:
        testb   %sil, %sil
        sete    %al
        testb   %dil, %dil
        setne   %dl
        andl    %edx, %eax
        ret
        .p2align 4,,10
        .p2align 3
.L11:
        testb   %dil, %dil
        movl    $1, %eax
        jne     .L5
        rep
        ret
        .cfi_endproc
.LFE0:

var2:
.LFB1:
        .cfi_startproc
        testb   %sil, %sil
        sete    %al
        testb   %dil, %dil
        sete    %dl
        xorl    %edx, %eax
        ret
        .cfi_endproc
.LFE1:

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

что касается взгляда на логику, то по-моему, двух мнений тут быть не может: операция ^ арифметическая битовая, операция ! -логическая. в одном выражении смешаны два вида операций. математика такого не допускает: логические выражения не смешиваются с арифметическими. в Си этот принцип может быть нарушен (по стандарту), и в этом я вижу нарушение логики. запись выражения для ЛОГИЧЕСКОГО XOR только при помощи исключительно ЛОГИЧЕСКИХ операторов мне кажется абсолютно логичной, и позволяет привести математическую логику в русло стандарта Си. мой вариант как раз и отражает суть булевой алгебры преобразования логических функций - помните это? в моем варианте записи все сделано как раз в строгом соответствии с этим, и ни один пункт стандарта Си не нарушен - два плюса против одного вашего sm.gif

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

P.S. а что этоу вас за опкод какой-то странный в первом листинге второго варианта - rep? вроде как это префикс-повторитель, и тут он как бы неуместен...
Буратино
а еще можно попробовать:
Код
с=(!a + !b) % 2;
Herz
Цитата(Буратино @ Mar 25 2013, 14:21) *
а еще можно попробовать:
Код
с=(!a + !b) % 2;

Можно, но зачем? Дабы восхититься красотой абсурда?
Понятно, что можно нагородить множество конструкций, дадущих верный ответ, но... Абстракционисты - тоже художники...
Я вот читаю ветку и хоть не специалист, но аргументы уважаемого ARV кажутся мне весьма убедительными.
Хорошо владеть языком в совершенстве, и стоит к этому стремиться. Но богатые возможности языка совсем не обязывают использовать их непременно в полной мере.
Важнее, имхо, чтобы программу можно было читать, а не требовалось расшифровывать. Разумеется, при прочих равных. Или иногда даже в ущерб размеру.
Ведь абстракциониста оценит лишь абстракционист. biggrin.gif
demiurg_spb
Цитата(Herz @ Mar 25 2013, 16:40) *
Можно, но зачем? Дабы восхититься красотой абсурда?
О каком абсурде вы говорите?
Вы гляньте во что оно компилится на целевой архитектуре, сравните с изначальным вариантом. А потом делайте выводы.
Си - это очень выразительный язык. Он позволяет решать любые задачи множеством путей. Соль программирования заключается в том, чтобы найти самый оптимальный.
Критериев может быть несколько. Ваши критерии находятся ортогонально моим... Ну и что с того? Я же не говорю что вы абсурдны, как и результаты вашего труда?
Даже для растущего программиста не составит никаких проблем прочитать такую конструкцию. А то что некоторые стараются замкнутся в своих личных предрассудках - это личное дело каждого. У каждого свой путь в жизни. Для кого-то не важно быть супер квалифицированным программистом, у кого то приоритеты в схемотехнике.
Давайте я тоже буду вам говорить, что схемотехнические решения должны быть только из книги "Искусство схемотехники", а то видите-ли не столь квалифицированные разработчики будут в непонятках. Смешно звучит не правда-ли? Мне по-настоящему смешно читать посты ARV и ваши реплики о программировании...
mdmitry
Цитата(ARV @ Mar 25 2013, 14:32) *
какая из этих конструкций более соответствует здравому смыслу?

Здравый смысл категория неопределенная. Апеллировать к ней трудно.

Надеюсь, дискуссия не возникнет из утверждения: Язык математики (математической логики) не эквивалентен языку программирования (имеются в виду возможности языка).

Посмотрев дискуссию, я сделал для себя следующее наблюдение (может и не верное laughing.gif ):
Уважаемый ARV предлагает использовать язык программирования (например, для логических выражений) строго как предписывает математика. Конструкции языка программирования эквивалентны языку математики.
Уважаемые оппоненты ARV предлагают использовать некоторые документированные возможности языка для получения того же результата не следуя строго канонам математики.

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


igorle
Цитата(Буратино @ Mar 25 2013, 16:21) *
а еще можно попробовать:
Код
с=(!a + !b) % 2;

Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая.
Для расширения кругозора можно сделать вот так:
Код
с=(!a + !b) & 0x1;

Вам, как "ученику" - домашнее задание. Объясните как работает эта конструкция

Вариант !!a ^ !!b мне нравится больше, так как в нем прямо написано - выполнить КСОР
Я НЕ пишу !a ^ !b, так как результат и логически, и в двоичном коде будет одинаковый, но !! означает "превратить в булеву форму", а один восклицательный знак означает инверсию, что заставляет задуматься - а не поменялась ли здесь логика.

2 Herz - мистер ARV ратует не за простоту. Он ратует за исключение из языка всех форм, выходящих за рамки лексикона людоедки Элочки. Объясняя это тем, что "вы тут слишком вумные, простым работягам это ни к чему". Выжечь, говорит, эту гидру каленым железом (тупыми ножницами)

Насчет понимания. Короткие посты понять легче, чем многостраничный поток сознания.
Специалист говрит - XOR a и b , и его понял другой специалист.
А имярек говорит "тут, эта, такая величина, что если а истино, а b - ложно, то эта величина будет истина. Или если a ложно а b - истино, то величина тоже будет истина"
Если вы не специалист и не знаете что такое XOR, то вы поймете второго, но став специалистом, глупо продолжать использовать такие конструкции.
thermit
http://govnokod.ru/c
Herz
Цитата(demiurg_spb @ Mar 25 2013, 14:55) *
О каком абсурде вы говорите?
Вы гляньте во что оно компилится на целевой архитектуре, сравните с изначальным вариантом. А потом делайте выводы.
...
Мне по-настоящему смешно читать посты ARV и ваши реплики о программировании...

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



Цитата(igorle @ Mar 25 2013, 17:04) *
Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая.

Именно. Возможно, компилятор попытается оптимизировать её сдвигом. Всё-таки, деление на 2. Но всё равно вряд ли тут есть смысл.

Цитата(igorle @ Mar 25 2013, 17:04) *
2 Herz - мистер ARV ратует не за простоту. Он ратует за исключение из языка всех форм, выходящих за рамки лексикона людоедки Элочки. Объясняя это тем, что "вы тут слишком вумные, простым работягам это ни к чему". Выжечь, говорит, эту гидру каленым железом (тупыми ножницами)

Да нет, по-моему, Вы сгущаете краски. Зачем же скатываться в крайности? Я вот понял его совсем иначе.
ARV
!!a вам нравится больше, чем !a... особенно для самого нормального случая в си, когда а=25. НЕ НЕ 25 это разумеется 1 !!! это логика двоичного робота, но не человека.


некоторые вещи вам непонятны не потому, что ваши понятия узки, но потому, что вещи сии не входят в круг ваших понятий. это К.Прутков сказал прямо про вас sm.gif

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

не хочу никого обидеть, но по-моему, это уже диагноз... уважаемые "ученики"! прошу вас, сохраняйте здравый смысл! он поможет вам даже тогда, когда Си окажется бесполезным.
P.S. Спасибо уважемому модератору Herz-у, что все-таки рассмотрел зерно здравого смысла в моих словах. значит, либо я не так уж плох, либо не все еще потеряно...
Буратино
Цитата(igorle @ Mar 25 2013, 19:04) *
Для расширения кругозора можно сделать вот так:
Код
с=(!a + !b) & 0x1;

Вам, как "ученику" - домашнее задание. Объясните как работает эта конструкция


Я понимаю, как это работает.
---
Сори, но скобки тут лишние rolleyes.gif
ViKo
Цитата(igorle @ Mar 25 2013, 18:04) *
Я НЕ пишу !a ^ !b, так как результат и логически, и в двоичном коде будет одинаковый, но !! означает "превратить в булеву форму", а один восклицательный знак означает инверсию, что заставляет задуматься - а не поменялась ли здесь логика.

Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму.
ARV
Цитата(ViKo @ Mar 25 2013, 20:09) *
Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму.
вы посягнули на мнение профессионала! сказано - инверсия, значит инверсия!
ViKo
Цитата(ARV @ Mar 25 2013, 19:23) *
вы посягнули на мнение профессионала! сказано - инверсия, значит инверсия!

В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки. Так же и другие (не будем показывать пальцами) не желают шагнуть за пределы своих укоренившихся принципов. А зря. Никто не заставляет силой использовать то, что не нравится. Но иметь в виду, понимать - это никому не вредит. Лично я узнал кое-что новое, за что благодарю всех участников дискуссии. И в книжки несколько раз заглянул, что тоже пойдет на пользу. sm.gif
P.S. А 5[a] все равно использовать не буду! Это противоречит моему здравому смыслу. sm.gif
ARV
Цитата(ViKo @ Mar 25 2013, 20:52) *
P.S. А 5[a] все равно использовать не буду! Это противоречит моему здравому смыслу. sm.gif
вы только скажите, что вы и раньше так думали, а то если окажется, что это я вас заразил этой крамолой, я себе не прощу...
toweroff
Цитата(ViKo @ Mar 25 2013, 20:52) *
В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки. Так же и другие (не будем показывать пальцами) не желают шагнуть за пределы своих укоренившихся принципов. А зря. Никто не заставляет силой использовать то, что не нравится. Но иметь в виду, понимать - это никому не вредит. Лично я узнал кое-что новое, за что благодарю всех участников дискуссии. И в книжки несколько раз заглянул, что тоже пойдет на пользу. sm.gif
P.S. А 5[a] все равно использовать не буду! Это противоречит моему здравому смыслу. sm.gif

+1
тоже много подчерпнул sm.gif
И 5[] для меня тоже какой-то бред, однако в лаконичности
Код
return "0123456789abcdef"[i]

что-то есть wink.gif
ViKo
Цитата(ARV @ Mar 25 2013, 19:59) *
вы только скажите, что вы и раньше так думали, а то если окажется, что это я вас заразил этой крамолой, я себе не прощу...

Раньше я даже в ... нетрезвом виде не допускал, что такое возможно. Не знал. И сейчас считаю это нелогичным.
В отличие от всех остальных "приемов".
Читал две книжки, не считая каких-то еще при социализме изданных - K&R и Шилдта. Ни там, ни там такого 5[a] не написано. Наверное, не без причин.
ARV
Цитата(ViKo @ Mar 25 2013, 20:52) *
В данном конкретном вопросе (!! vs !) я не нахожу причин, почему igorle отказывается использовать одиночные !, кроме, как привычки.
видимо, он вместо if(a) использует if(!!a). тогда понятно, почему !! вместо !
toweroff
Цитата(ViKo @ Mar 25 2013, 21:02) *
Читал две книжки, не считая каких-то еще при социализме изданных - K&R и Шилдта. Ни там, ни там такого 5[a] не написано. Наверное, не без причин.

надо у Страуструпа посмотреть, но тоже не помню такого
ARV
Цитата(ViKo @ Mar 25 2013, 21:02) *
Раньше я даже в ... нетрезвом виде не допускал, что такое возможно. Не знал.
все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям.


ViKo
Цитата(ARV @ Mar 25 2013, 20:15) *
все мы в определенный момент что-то новое узнаем. просто один в восторге от того, что новое знание не укладывается в его голове, а другой в ужасе. это как знание уязвимых точек человеческого тела: обязательно найдется кто-то, кто в первую очередь кого-то покалечит после знакомства с ними...все приведенные здесь примеры многократно описаны в литературе, так что никто из здешних авторитетов америки не открыл. просто эти знания редко-редко кому на самом деле помогают, и потому редко-редко кто о них помнит. но порой блеснуть ими перед новичком очень к месту. вместо того, чтобы научить новичка думать, учат следовать готовым шаблонным решениям.

Мне кажется, что всю эту цитату мог бы сказать и igorle. biggrin.gif beer.gif
ARV
Цитата(ViKo @ Mar 25 2013, 21:19) *
Мне кажется, что всю эту цитату мог бы сказать и igorle. biggrin.gif beer.gif


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


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

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

Цитата(ViKo @ Mar 25 2013, 19:09) *
Инверсию означает ~, а ! означает логическое отрицание (НЕ), и он тоже превращает в булеву форму.

Да, конечно отрицание, а не инверсию. Как уже говорили - скомпилированный код будет одинаковый. А ставить один или два восклицательных знака - дело привычки. Не более того. Как я уже говорил - для меня !! означает кастинг к булевому типу.
toweroff
Я вот что хочу сказать. Если общий проект написан в стиле !!, то и придерживаться нужно подобного стиля. Если в стиле "понятный", то в таком
Знать возможности и применять их - это только на усмотрение в конкретной ситуации
igorle, не мы начинали тему, но все уже 16 листов читать познавательно. Зачем закрывать?
Herz
А вообще приём с двойным восклицательным знаком красивый. Возьму, пожалуй, на вооружение. Как идиому.
Напомнил мне, по аналогии, одно схемотехническое ухищрение, тоже нестандартное: выделение модуля сигнала посредством одностороннего насыщения усилителя за счёт однополярности питания. rolleyes.gif
demiurg_spb
Цитата(igorle @ Mar 25 2013, 19:04) *
Попробовать - можно. Делать - не стоит. Операция "остаток от деления" очень тяжелая.
Для расширения кругозора можно сделать вот так:
Код
с=(!a + !b) & 0x1;
А кто сказал что будет применена операция остаток от деления?
Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами
Код
X % N^2
к
Код
X & (N^2 - 1)
И это всем давно известно и используется абсолютно обыденно.

Цитата(Herz @ Mar 25 2013, 19:43) *
Ведь вижу запись, выглядящую абсурдно. Вот Вы тоже: прочтите её вслух, а затем тоже сделайте выводы. Не смешно? Только честно.
Абсолютно честно никакого абсурда.
Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда.
Почему вы сначала изучали законы Кирхгофа, а только потом приступили к схемотехнике?
А тут позволяете себе не зная стандарта (читай законов Кирхгофа) давать Коментарии подобного рода?
Вот в этом я вижу абсурд.
ARV
Цитата(demiurg_spb @ Mar 26 2013, 09:48) *
Абсолютно честно никакого абсурда. Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Никакого абсурда. Почему вы сначала изучали законы Киргофа, а только потом приступили к схемотехнике?
А тут позволяете себе не зная стандарта (читай законов Киргофа) давать Коментарии подобного рода?
потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу. Законы Кирхгофа основаны на законах математики (и физики) и выводятся строго на логической базе этих наук, поэтому эти законы выглядят красиво, логично и спорить с ними бесполезно. а стандарт, родившийся просто из головы человека, может быть оспариваем. хотя бы частично. это не закон природы.
demiurg_spb
Цитата(ARV @ Mar 26 2013, 09:59) *
это не закон природы.
Вам уже давно пора уняться и перейти от законов природы к законам Божьим....
Возможно будет гораздо больше пользы...
Мы сейчас программируем на Си. У этого языка есть правила и законы (стандарт).
О чём ещё можно говорить???
Напишите свой собственный язык и только тогда втирайте очки окружающим!
Цитата
потому что еще раньше изучили математику
А ещё раньше ходить на горшок! И что? Мои дети закончили этот этап.
Повторюсь, есть стандарт - его утверждал и редактировал не один и не 2 и даже не 10 человек.
А тут появился пуп земли и ему не нравится. Не нравится - не ешь!
Или вы настолько умны, что считаете себе возможным давать рекомендации - читай изобретать новый стандарт поверх имеющегося?
Я поражён вашим тупым упорством. Вы ничего не можете изменить в сложившейся ситуации и учиться вам тоже видимо лень.
Вам остаётся одно - идти в депутаты и с высокой арены поливать потоком мутного сознания окружающих. Прощайте!
ARV
Цитата(demiurg_spb @ Mar 26 2013, 10:04) *
Прощайте!
неужели я вас довел до суицида?! rolleyes.gif я не опровергаю стандарты, даже не призываю их пересматривать. это вы усматриваете в моих словах посягательство на святое. я ратую за приведение программ в соответствие со здравым смыслом без противоречий со стадартом. что в этом не так? или важнее именно отсутствие здравого смысла в коде?


bb-offtopic.gif а если помечтать: вот стал я депутатом какого-нибудь европарламента и добился пересмотра стандарта Си. уже на следующий день вы станете с не меньшим упорством перекрещивть какого-нибудь igorle в новую веру? wink.gif
XVR
Цитата(ARV @ Mar 25 2013, 15:32) *
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.gif

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

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

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

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

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

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

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

Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого -
Код
#define begin {
#define end }
Но через несколько месяцев это прошло 1111493779.gif

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

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

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

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

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

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

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

Цитата(ARV @ Mar 26 2013, 08:59) *
потому что еще раньше изучили математику (одну из основополагающих наук, программирование даже не втоично по отношению к ней), в которой коров приводить к километрам никак невозможно. и именно в том и абсурд, что стандарт устанавливает разрешение приведения множества чисел к единственному числу.

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

Затем:
Цитата(demiurg_spb @ Mar 26 2013, 08:48) *
Любой компилятор последних 3ёх-5и лет преобразует операцию с целыми неотрицательными числами
Код
X % N^2
к
Код
X & (N^2 - 1)

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


ViKo
Цитата(XVR @ Mar 26 2013, 10:51) *
Я помню у нас на работе был один товарищь, которому пришлось пересесть с Pascal на С. Так у него сразу появился специальный хидер такого содержимого -
Код
#define begin {
#define end }
Но через несколько месяцев это прошло

А я, когда взялся за Verilog, хотел было сделать обратное
Код
#define { begin
#define } end

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

Мне как раз нравится лаконичность языка C.
ARV
честно говоря, я уже начал уставать...

Цитата(XVR @ Mar 26 2013, 11:51) *
А вот это странно. Если меняется только вызов, то разницы в размере вообще быть не должно, т.к. соглашения о вызовах функций не зависит от их содержимого.
...
А вот это непонятно, почему тогда конечный результат получился прямо противоположный?

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


Цитата(XVR @ Mar 26 2013, 11:51) *
Это огромный минус - вы придумали себе идеальную модель мира и пытаетесь запихнуть в нее идеологию языка С, а она туда не лезет. Вместо того, что бы прочувствовать эту идеологию, вы заявляете, что все, что противоречит вашей модели мира является неправильным и противоречащим здравому смыслу, и объявляете это вне закона.
снова вынужден повторить: не подгоняю я, не объявляю вне закона. это вы подгоняете реальность под рамки Си, а я как раз предлагаю этого не делать, оставив все в более простом и естественном виде. тем более что даже вы доказали, что по сути разницы в размере кода нет:
Цитата(XVR @ Mar 26 2013, 11:51) *
Помещение всех функций в один файл и добавление static к var1/var2 дала 8876 для обоих вариантов.
то есть, как я и догадывался, компилятор оказался умнее

Цитата(XVR @ Mar 26 2013, 11:51) *
Хотя я кажется догадываюсь откуда он взялся. Вы тут упоминали о том, что писали на Pascal'е. Ваша реакция типична для программиста недавно перешедшего с Pascal на С.
да, только не недавно, а довольно давно. и естественно, что я могу видеть то, чего не видят те, кто кроме Си ничего знать не желает - проблемные места.

раз уж мы снова прибегаем к красочным примерам, я приведу тоже пример. вот абориген австралийский - он ничуть не смущаясь выковыривает из муравейника личинок и ест их. а цивилизованный человек как минимум перед этим принимает пол-литра виски sm.gif но скорее он ест хорошо прожаренный бифштекс - а ведь для приготовления бифштекса надо гораздо больше усилий и стредств... при этом их цель - насытиться - одинакова, обоим их поведение кажется наиболее естественным. НО!!! обратите внимание: абориген гораздо ближе к природе - он не делает ничего, что не укладывается в примитивные рамки выживания. Си, как тут меня пытались просветить, язык, приближенный к архитектуре, и позволяет программисту вести себя, как абориген в сельве: не делть ничего, кроме самого примитивно-необходимого. о каких приличиях тут можно говорить? чтобы не сдохнуть, надо есть, а что именно и в каком виде, тем более, как это выглядит со стороны - это вторично.

я предлагаю быть цивилизованным, и совершать чуть больше действий, чтобы получить тот же конечный результат, что и дикарь. и все это только для того, чтобы чувствовать себя цивилизованным человеком. я предлагаю усложнять внешне (хотя и не совсем это верно - усложнять, но пусть так), сохраняя суть и результат, а не следовать неписанным правилам. ведь нигде в стандарте Си не сказано, что надо писать именно !a ^ !b вместо чего-тоиного. это кое-кто считает это лучшим, без каких-то существенных доказательств.

P.S. прошу всех оппонентов: не делайте равенства между ИНЫМ МНЕНИЕМ и ГЛУПОСТЬЮ или НЕЗНАНИЕМ. это несколько утомляет при чтении.

P.P.S. блин, я ж совсем забыл, что по стандарту Си нет многих иных мнений: отрицание одного мнения соответствует наличию только одного альтернативного варианта - негативного, ложного мнения...
demiurg_spb
Цитата(igorle @ Mar 26 2013, 12:28) *
Видите, какие умные компиляторы стали? А Вы код компилятора видели? Я пытался понять один кусочек кода GCC (подозревал, что там есть баг) и не понял ничего sad.gif Уровень абстракции в том месте куда я сунулся был не сравнить с тем, что здесь подавалось как высший пилотаж.
Досадно что ничего не поняли. Не с того места начали изучение...

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

А здесь и "тусуются", по крайней мере несколько человек точно. И я, если честно, не понял вашего сарказма совсем...
Вам что-то не понравилось в моём высказывании? Или не в силах принять такой укол судьбы, что кто-то дал более развёрнутый ответ чем ваш?
Вы становитесь похожи на ARV в своём "стремлении" познать новое...
ARV
Цитата(igorle @ Mar 26 2013, 12:28) *
Будьте последовательны.
Стандарт предусматривает запись типа
x = x + 10
С математической точки зрения это полная ерунда, так как не может быть верно ни при каких значениях x
Добейтесь признания сообщества, что так писать нельзя.
вы опять пытаетесь мне приписать попытку свергнуть стандарт. что МОЖНО и НЕЛЬЗЯ по стандарту - я знаю, принимаю, и не протестую. заметьте, я лишь говорю, что НЕ ВСЕ и НЕ ВСЕГДА из того, что МОЖНО, СЛЕДУЕТ применять. причем кое-что не следует (в моем понимании) применять именно с целью приближения к тому самому идеалу - совпадению с логикой. вы же считаете, что если я говорю "не делай так", то это равносильно "это неверно". я такое не утверждаю.

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

дано: Вася говорит, что дважды два - пять.

я говорю: Вася не прав.

вы говорите: Вася глуп (вариант: не умеет считать)


если сказанное записать на языке Си - получится как раз то, что говорите вы, но на самом-то деле верно то, что говорю я!

поясню.

прав - это истина, не прав - это отрицание правоты.

умен - это истина, не умен - это отрицание ума.

любое отрицание истины в Си - это однозначно ложь.

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

MrYuran
Цитата(ARV @ Mar 26 2013, 13:30) *
если два выражения поотдельности равны третьему, то они равны между собой. значит, не прав - это не умен. такая вот загогулина.

Если вы [все ещё] про логические операции, то (27>0) == (1>0), и из этого никак не следует, что 27 == 1.
Или речь уже про что-то другое?
Буратино


Я прошу прощения, но эту ветку могут закрыть (особенно если учесть с каким трепетом ко мне относится некоторая часть мод. корпуса форума), а мне это совершенно не нравится. Обращаю ваше внимание на то, что по большей части обсуждается отношение участников к языку программирования Си, а собственно сам язык, его сила и красота остались в стороне.
Herz
Цитата(demiurg_spb @ Mar 26 2013, 07:48) *
Абсолютно честно никакого абсурда.
Вижу идею: приведение целых к булу (пусть и с инверсией - не важно) и последующее исключающее или двух целых. Очень лаконично и красиво. Повторюсь - никакого абсурда.

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

Цитата(igorle @ Mar 26 2013, 10:28) *
Вот смотрите, Herz пришел в эту ветку недавно. И хотя он позиционирует себя как электронщик, а не как программист, он прошел путь от возмущения до восхищения двумя восклицательными знаками всего за один день. 25-го он назвал это абсурдом, 26-го сказал, что примет на вооружение. Это обычный путь думающих и развивающихся людей.

Э... Вы тоже невнимательны, к сожалению. Вернитесь чуть назад и проверьте, что именно я назвал абсурдом.
Запись с двойным восклицательным знаком мне действительно понравилась. И на вооружение, при случае, возьму, хоть пока ума не приложу, где бы мне это могло пригодиться. Потому и сделал соответствующую оговорку, кстати.
Но за думающего человека спасибо.
ARV
Цитата(MrYuran @ Mar 26 2013, 13:35) *
Если вы [все ещё] про логические операции, то (27>0) == (1>0), и из этого никак не следует, что 27 == 1.
не совсем об этом. я говорил о сравнении результатов отрицания. видимо, вы пропустили: ИКС равно НЕ НОЛЬ на самом деле обозначает непустое множество вариантов ИКС, среди которых только ИКС равное НУЛЮ будет исключено. впрочем, я повтояюсь.


igorle
Цитата(demiurg_spb @ Mar 26 2013, 12:40) *
Досадно что ничего не поняли. Не с того места начали изучение...

Перефразирую: Не говорите мне куда идти и я не скажу кто вы.

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

Что не понял - действительно достадно. Если бы рядом был человек, который бы помог сделать первые шаги - было бы хорошо. А одному с наскока не получилсоь.

По поводу всего остального - это я не Вам писал. Это было обращение к AVRу. Я сослался на Ваши слова, чтобы показать AVRу что GCC - очень хороший продукт, но при этом написан на высоком уровне абстракции.
Ваше высказывание мне понравилось. Мне комфортнее читать a&0x7, вы напомнили, что компилятор выдаст для a%8 тот же результат. Я Вас понял и принял замечание.

Более того, а знаю, что Вы, как раз, общаетесь с разработчиками GCC и пытаетесь улучшить компилятор.

Так что прошу прощения за то, что неклюже вставил цитату на Вас в своем диалоге с ARV. Насколько я помню, у нас с Вами разногласий до сих пор не возникало.

Пора, пора закрывать эту ветку....
Herz
Цитата(Буратино @ Mar 26 2013, 11:38) *
Я прошу прощения, но эту ветку могут закрыть (особенно если учесть с каким трепетом ко мне относится некоторая часть мод. корпуса форума), а мне это совершенно не нравится. Обращаю ваше внимание на то, что по большей части обсуждается отношение участников к языку программирования Си, а собственно сам язык, его сила и красота остались в стороне.


Отвечу, как часть мод. корпуса. Вы совершенно справедливо беспокоитесь о судьбе ветки. В этом свете особо хотел бы попросить уважаемого demiurg_spb сдерживать эмоции и не переходить на личности.
А вот по поводу некоего особо трепетного отношения именно к Вам "некоторой части мод. корпуса" - уверен, Вы заблуждаетесь. И мне очень жаль, что Вами были сделаны столь "персональные" выводы. Был бы рад, если бы Вы смогли спокойно пересмотреть суть претензий к Вам.
igorle
Все. Раз пошла такая ерунда - "баню" сам себя на неделю.
Ариведерчи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.