1. Куча / Говнокод #27440

    +1

    1. 1
    1/-~a

    Если тоже задолбались писать скобочки

    1/(a+1)

    Запостил: 3_dar, 26 Мая 2021

    Комментарии (37) RSS

    • А стандарт гарантирует что получится в результате побитовой инверсии всегда?
      Ответить
      • Для знаковых -- нет конечно, он же представление чисел не фиксирует. Но вроде не UB.

        Для беззнаковых гарантирует.
        Ответить
        • В C++20 теперь официальня two's complement:

          [basic.fundamental]
          3 An unsigned integer type has the same object representation, value representation,
          and alignment requirements ([basic.align]) as the corresponding signed integer type.
          For each value x of a signed integer type, the value of the corresponding
          unsigned integer type congruent to x modulo 2^N has the same value of
          corresponding bits in its value representation. [37]
          
          37) This is also known as two's complement representation.
          
          [expr.unary.op]
          10 The operand of ~ shall have integral or unscoped enumeration type;
          the result is the ones' complement of its operand.


          См. также: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0907r1.html (хорошая демонстрация того, почему ме-нять стандарт C++ так сложня).
          Ответить
          • Это かわい или こわい?
            Ответить
          • То есть все 50 лет использовали дополнительный код для представления отрицательново говна, и вдруг его решили узаконить?
            Ответить
            • Ну видимо все архитектуры, где было другое представление чисел, вымерли... Осталось little endian принять.
              Ответить
              • Хм
                А причем тут эндиан к способу хранения отр. чисел?

                char будет одинаковый вроде бы, а всё, что больше будет разным и unsigned
                Ответить
                • Ну просто у little-endian и big-endian нет особых преимуществ друг перед другом. Поэтому пора уже раз и навсегда выбрать что-то одно, а второе отправить на помойку истории. Вместе с 9-битными байтами. Раз уж даже ones complement и signed magnitude туда ушло.

                  Будет на всех платформах единое представление чисел в памяти, с точностью до бита. Это же охуенно.
                  Ответить
                  • Ну это авторы процов скорее должны сделать
                    А ща везде одинаковый ордер?

                    Я помню, што у спарков был другой, но спарки уже не нужны

                    two's complement вроде бы самый удобный, позволяющий "не думать" про знак в некоторых операциях, не?
                    Ответить
                    • > two's complement вроде бы самый удобный

                      Ну да, у тебя и сложение и вычитание и знаковых и беззнаковых одной схемой выполняться может. Видимо поэтому оно и победило.
                      Ответить
                    • > А ща везде одинаковый ордер?
                      На MIPS big-endian.
                      Ответить
                    • это у штеудов другой, не как у белых людей
                      при царе горохе для экономии на спичках переносах сделали, так и тянется
                      Ответить
                  • как раз хорошая тема на которой можно освоить много грантов
                    Ответить
                  • > 9-битными байтами
                    бод-секунда в системе сгс-линукс!
                    Ответить
          • Если говорить о самом приросте штатов, исследования наши показали, что в среднем прирост этот равен 5,75% в год. Это дает нам возможность облечь закон Паркинсона в математическую форму. В любом административном учреждении в мирное время прирост служащих вычисляется по формуле: X = (2s^m+l)/n, где s — количество служащих, набирающих себе подчиненных, чтобы продвинуться по службе; l — количество лет, проведенных на работе; m количество человеко-часов, потраченных на обработку материала; n количество нужных служащих; х — нужное число новых служащих в год.

            Математикам ясно, что для вычисления прироста в процентах надо умножить х на 100 и разделить на число служащих предыдущего года (y). Выглядит это так: 100*(2s^m+l)/y^n %

            Число это неизменно будет где-то между 5,17 и 6,56% независимо от объема работы и даже при полном ее отсутствии.
            Ответить
        • > он же представление чисел не фиксирует
          вот меня это и испугало в коде

          Я вообще все эти игры с битами (сдвиги-хуиги и пр) делаю только если реально нужно рабоатть с отдельными битами, или если беззнаковое число, и охото выебнуца, а знаковые сцу трогать
          Ответить
          • В ассемблере есть сдвиг. Он арифметический. Но бывает и логический. И каждый сдвиг делает РАЗНОЕ.
            Ответить
          • > а знаковые сцу трогать

            Аналогично. Благо битушня ня отрицательных числах нужна чуть менее чем никогда.
            Ответить
      • Что за стандарт?
        Ответить
    • Возвращение оператора "Головастик"
      Ответить
      • В lua тильда обозначает как не. a ~= b но вроде бы как в в движке сурс этот оператор переписан на a !=b из за того что тильда залочена на консоль
        Ответить
        • В факторио тоже так переделали, чтобы привычнее.
          Ответить
        • да, в луа это меня удивляло по началу

          "x ~= 0"
          Ответить
          • Из точки х выплыл головастик. Вопрос: зачем? Зачем?
            Ответить
            • Это сперматозоид стремится к яйцеклетке, глупый (в смысле спермотазоид глупый, а не ты). Ему кто-то сказал, что жить это прикольно

              Ответить
              • >> Ему кто-то сказал, что жить это прикольно
                Очень жестокий троллинг
                Ответить
    • https://youtu.be/QI-bXKC2mvU
      Ответить
    • Как работает >> между стримом и строкой?
      // вот тут
      	std::fstream f("c:\\temp\\1.txt");
      	std::string s;
      	f >> s;

      слово считается в кучу, и создастся строка, которой передадут указатель на эту кучу?

      Как вообще стрим, читающий побайтово, буферизирует слово? А если там одно смешное слово на 4 гига?
      Ответить
      • ладно, я подсмотрел код, если вы отвечать не хотите

        туда передается строка, и в нее прямо срёт стрим, а уж где она что хранит это её дело
        Ответить
      • > Как вообще стрим, читающий побайтово, буферизирует слово?

        Ну, вообще в стримах С++ есть встроеный буфер basic_streambuf, в котором как минимум 1 символ по стандарту буферизируется. А так да, оператор >> это просто функция istream& operator>>(istream&, string&), которая как хочет, так и вертит своими операндами
        Ответить
      • Сейчас в игнор пойдёшь.
        Ответить
    • А зачем тут этот трюк? Я понимаю, побитовый сдвиг быстрее чем умножение и деление выполняется. Или там какие-то побитовые алгоритмы типа sha256. Тут битовый хак с отрицанием усложняет понимание арифметической формулы за ненадобностью.
      Ответить
      • Написано же:
        > Если тоже задолбались писать скобочки
        Ответить
        • Если жизнь сера и уныла, а хочется острых ощущений от чтения стандарта...
          Ответить

    Добавить комментарий