1. C# / Говнокод #13070

    +138

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    // Преобразует BCD формат в число
    private static int BCDToInt(byte bIn)
    {
        return ((((bIn / 0x10) * 10) + bIn) - ((bIn / 0x10) * 0x10));
    }
    
    // Преобразует число в BCD формат
    private static byte IntToBCD(int value)
    {
        value -= (value / 100) * 100;
        byte bTH = (byte)(value / 10);
        byte bTL = (byte)(value - (bTH * 10));
        return (byte)(bTL + ((byte)(bTH << 4)));
    }

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

    референс-код от партнеров для конверсии binary-coded decimal вперёд и взад
    чтобы как бы верно срослось между ихним с# и нашим сраным с++

    Запостил: defecate-plusplus, 29 Мая 2013

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

    • return ((((bIn / 0x10) * 10) + bIn) - ((bIn / 0x10) * 0x10));
      Хм, а почему не так?
      return (bIn / 0x10) * 10 + bIn % 0x10
      Ответить
      • вот такой вот полёт фантазии
        были домыслы, что оператор % был не с самой первой версии языка, но это сложно поверить

        если че, "/ 0x10" и "% 0x10" хоть, возможно, заменятся на нужное, но выглядят кхм
        static unsigned char to_bcd(unsigned char c)
        {
        	c %= 100;
        	return ((c / 10) << 4) | (c % 10);
        }
        
        static unsigned char from_bcd(unsigned char c)
        {
        	return (c & 0x0f) + 10 * (c >> 4);
        }
        Ответить
        • Видимо автор боялся, что компилятор не сможет заменить пару из / 10 и % 10 на одну асмокоманду, а / 16 и % 16 на сдвиги и маски.
          Ответить
        • Немножко байтоёбства:
          to_bcd:
              aam
              shl ah, 4
              or al, ah
          
          from_bcd:
              shl ax, 4
              shr al 4
              aad
          Ответить
          • Эх да, почему в сишке нет поддержки такого? А поддержка bsr?
            Ответить
            • потому что CISC
              хочешь кросс-платформенный ассемблер, поддерживающий всё что можно?
              это дело компилятора и его оптимизации сишного кода под заданную платформу - но на самом деле я сейчас так и не заставил g++ из кода, приведенного мной выше, соптимизироваться в aam/aad
              Ответить
              • При желании можно добавить в компилятор такую оптимизацию, но видимо никто про это даже не думал, потому что это какая-то нахуй не нужная экзотика.
                Ответить
                • именно
                  даже не узкое место, чтобы так заморачиваться
                  ну как вариант еще gcc.godbolt.org не умеет в -m32, чтобы посмотреть выхлоп конкретно под x86 - генерит только x86-64, так что может и умеет, только это не просто проверить теперь
                  Ответить
    • value в шарпе то ключевое слово :) правда только в одной ситуации.
      Ответить
    • Я сначала подумал, что мне это снится: defecate-plusplus в разделе шарпов.
      Ответить
    • Кстати, меня вот на работе заставляют переписывать код, который мы отдаем "дружественным" организацыям примерно в таком же ключе. Т.е. сначала я пишу нормально, а после код-ревью я переделываю функции высшего порядка в циклы, заменяю редко используемые операции на чаще используемые и т.д. Например, не далее чем позавчера пришлось заменить функцию, которая копировала два объекта в один (на манер extend) полотном из if (a.prop) b.prop = a.prop.
      Наверное в этом заключается суть проприетарного энтерпрайза...
      Ответить
      • ну не знаю
        зачем тогда такое партнерство - ставить палки друг другу в колеса
        особенно когда обе стороны заинтересованы, чтобы их системы как можно лучше взаимодействовали с наименьшими проблемами
        Ответить
        • Вот поэтому очень желательно взаимодействие на уровне форматов и протоколов, а не исходников...
          Ответить
          • да оно и было
            просто я тогда проебал момент в описании, что в кое-каком поле они захотели bcd вместо обычного бинарного, ну и при первом совместном тестировании это всплыло
            правится за 5 минут, но они не постеснялись прислать мне вот такую "подсказку", подняли настроение

            может, wvxvw и прав, может они хороший код взяли и ухудшили, но, если честно, думаю всё несколько прозаичней :)
            Ответить
            • Ну, или другой пример. В проекте я обязан использовать WebEssentials. Мне он совсем не нужен, и делать мне с ним откровенно нечего. (Если не в курсе - это кусок проприетарного говна, без документации, и, понятное дело, исходников, который в теории можно использовать для работы с CSS / TypeScripit / CoffeeScript и т.п.)
              В чем заключается мое вынужденное использование: проект написан на TypeScript и WE можно использовать для сборки.
              Но, у WE нету вообще никаких API коммандной строки и интегрироваться с MSBuild он не может. Собрать проект только MSBuildом - отнюдь не сложно (я даже так и сделал, когда выяснил, что WE этого не умеет). Но, пришлось вернуть WE. Номинальная причнина - потенциальным пользователям MSVS этот инструмент привычнее.
              Результат - я забил на MSBuild / WE и билдю SCons'ом, из него же генерирую .csproj для начальста, чтобы отстали. Но мой наследник SCons билд не получит, а получит говно, с которым и будет мучатся...
              Ответить
        • Я думаю, что вопрос "зачем?" - это последнее, о чем печется начальство. Там есть вопросы поважнее, например, "когда" и "сколько". ;)
          Ответить
    • wh0cd208425 <a href=http://cheapviagra2017.com/>Cheap Viagra</a>
      Ответить
    • Поэтому я за "PHP".
      Ответить
    • показать все, что скрытоvanished
      Ответить

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