Змея / Говнокод #29074 Ссылка на оригинал

0

  1. 1
def neg(x): return int(bin(x)[2:].rjust(8, '0').replace('1','x').replace('0','1').replace('x','0'), 2)

Операция "NEG"

Запостил: j123123 j123123, (Updated )

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

  • Перевел через https://www.codeconvert.ai/python-to-c-converter :
    #include <stdio.h>
    
    int neg(int x) {
        char binary[9];
        for (int i = 0; i < 8; i++) {
            binary[i] = (x & (1 << (7 - i))) ? '1' : '0';
        }
        binary[8] = '\0';
    
        for (int i = 0; i < 8; i++) {
            binary[i] = (binary[i] == '1') ? '0' : '1';
        }
    
        return (int)strtol(binary, NULL, 2);
    }


    Ну и хуйня! Для правильного перевода надь использовать библиотеку с длинной арифметикой, а не это вот. Кто сказал, что x должен содержать не более чем 8 бит?
    Ответить
    • Нужен не правильный перевод, а наиболее подходящий для реальной задачи
      Ответить
      • Для реальной задачи можно написать:
        int neg(int x)
        {
          return -x;
        }

        Хотя тут будет UB в одном особом числе, так что можно исправить в
        #include 
        int neg(int x)
        {
          if (x == INT_MIN) return x;
          return -x;
        }
        Ответить
        • > UB в одном особом числе

          числе Тараса
          Ответить
  • К слову, NEG и NOT — не одно и то же.

    Для дополнительного кода (two’s complement):
    neg(x) = not(x) + 1


    А в прямом коде (который используется в плавпитухе) и инвертировать ничего не надо, только знак сменить.

    NEG совпадает с NOT только для обратного кода (one’s complement), который применялся в говне мамонта вроде UNIVAC.
    Ответить
    • И, кстати, число Тараса существует только в дополнительном коде (two’s complement). В прямом и в обратном его нету, но зато в них ноль со знаком.
      Ответить
    • Два комплимента лучше, чем Один.
      Ответить
  • # all_at_once = True for the sink parsing (/comments), False for optimized post parsing
    def _parse_comments(comments_node: lxml.etree._Element, all_at_once: bool = False) -> List[ParsedComment]:
        comments: List[ParsedComment] = []
    
        if all_at_once:
            hcomment_xpath = './/li[@class="hcomment"]'
        else:
            hcomment_xpath = './li[@class="hcomment"]'
        
        comment_nodes: List[Tuple[Optional[int], Any]] = [(None, c) for c in comments_node.xpath(hcomment_xpath)]
    
        while len(comment_nodes) > 0:
            parent_id, comment_node = comment_nodes.pop()
    
            comment_wrapper = comment_node.xpath('./div[@class="entry-comment-wrapper"]')[0]
            comment_link = comment_wrapper.xpath('./p[@class="entry-info"]/a[@class="comment-link"]')[0]
            m = re.search(r'govnokod\.ru/(\d+)#comment(\d+)$', comment_link.get('href', ''))
            if m is None:
                raise ParseError('Invalid comment-link (no regex match)')
            post_id = int(m.group(1))
            comment_id = int(m.group(2))
            comments.append(_parse_comment_node(comment_wrapper, post_id, comment_id, parent_id))
    
            for node in comment_node.xpath('./ul/li[@class="hcomment"]'):
                comment_nodes.append((comment_id, node))
    
        return comments


    ParsedComment* parse_comments(xmlNode *comments_node, int all_at_once, int *count) {
        ParsedComment *comments = NULL;
        *count = 0;
    
        const char *hcomment_xpath = all_at_once ? ".//li[@class='hcomment']" : "./li[@class='hcomment']";
        xmlNode *comment_nodes = xpath_nodes(comments_node, hcomment_xpath); // Implement xpath_nodes function
    
        for (int i = 0; i < comment_nodes->length; i++) {
            xmlNode *comment_node = comment_nodes->nodes[i];
            comments = realloc(comments, sizeof(ParsedComment) * (*count + 1));
            comments[*count] = parse_comment_node(comment_node, post_id, comment_id, parent_id);
            (*count)++;
        }
    
        return comments;
    }

    Какой багор )))
    Ответить
    • if (strstr(input_usr, "null") && strstr(input_usr, "chat")) {
              char query[1024];
              snprintf(query, sizeof(query), "INSERT INTO %s%s_usr SET time=%ld, uid=%d, usr=%d, uname=\"%s\", host=\"%s\" ON DUPLICATE KEY UPDATE uid=%d, time=%ld, usr=%d, uname=\"%s\", host=\"%s\"",
                       conf.db.prefix, arg.modpath, time(NULL), conf.user.uid, atoi(input_usr), mpquot(input_usr < 0 ? strcat(conf.settings.default_usr, "_", abs(atoi(input_usr))) : input_uname), mpquot(input_host), conf.user.uid, time(NULL), atoi(input_usr), mpquot(input_usr < 0 ? strcat(conf.settings.default_usr, "_", abs(atoi(input_usr))) : input_uname), mpquot(input_host));
              mpqw(query);
      
              conf.tpl.data = mpql("SELECT id.*, u.name FROM %s%s_index AS id LEFT JOIN %susers AS u ON id.uid=u.id ORDER BY id DESC LIMIT %d",
                                   conf.db.prefix, arg.modpath, conf.db.prefix, (atoi(input_usr) ? atoi(input_usr) : 20));
              conf.tpl.users = mpql("SELECT * FROM %s%s_usr WHERE time>%ld ORDER BY id",
                                    conf.db.prefix, arg.modpath, time(NULL) - conf.settings.chat_user_online);
              // Assuming krsort is implemented to sort conf.tpl.data
          }
      
          conf.db.conn = conf.db.back;
          mysql_close(conf.db.conn);
          return 0;
      }
      Ответить
      • Гост зачем люди кладут vcruntime140.dll в папку приложеия? почему не взять то, что есть в system32?
        Ответить
        • Привычка, выработанная со времён win95.
          Ответить
          • могу-ли я удалить этот файл, поставить последний с MS, и жлать, что он найдет его в system32 же?
            Ответить
            • Обычно так работает.

              Не сработает, только если программа как-то хитро грузит dll (но это не про сишный рантайм) или использует трюки, завязанные на конкретную версию (но если у приложения есть манифест, то должна подгрузиться нужная версия из WinSxS).
              Ответить
                  • The libraries deployment model no longer uses manifests to find a particular version of a dynamic link library. Instead, the name of each dynamic link library contains its version number, and you use that name to locate the library. For more information, see Deployment in Visual C++ 2010.
                    Ответить
                    • То есть все vcruntime140.dll друг с другом совместимы 100%?
                      Ответить
                      • Видимо обратно совместимы, да.
                        ABI поменяли в 2017-м году, и с тех пор 140. До этого было 130.

                        Я бы почитал что-то внятное про это в MSDN, потому что малость плаваю, но к сожалению искать "vcruntime140.dll" в гугле это примерно как искать "почему тормозит компьютер".
                        Ответить
                        • 130 пропустили. До VS 2015 (внутренний номер 14.0) версию ABI меняли с каждым выпуском студии.
                          Ответить
                        • Во первых, есть vcruntime-цифры, msvcp-цифры, msvcr-цифры и ещё какие-то варианты.

                          Во-вторых, цифры — это внутренний номер студии. Ты же в курсе, что есть «товарный» номер (2005, 2010 — вот это всё), есть внутренний и есть версия конпелятора.

                          Такая же питушня с версиями у Борланда и у Андроида.

                          Нумерация продолжает шестую студию:
                          7.0 = 2002
                          7.1 = 2003
                          8.0 = 2005
                          9.0 = 2008
                          10.0 = 2010
                          11.0 = 2012
                          12.0 = 2013
                          13.0 — пропустили
                          14.0 = 2015
                          15.0 = 2017
                          16.0 = 2019
                          17.0 = 2022

                          Но после 14-й версии началась путаница: компоненты могут заявлять о себе не как версии 15, 16, 17, а как 14-с-копейками. Т. е. 14.00 (строго нули) — это VS 2015, а если не ноль (14.42, как в твоём реальном примере), то это более новые версии студий.
                          Ответить
                          • Всё, я разобрался.

                            цифры есть в википедии
                            https://en.wikipedia.org/wiki/Microsoft_Visual_C%2B%2B#Internal_version_numbering

                            MS-CRT с майркрософт-специфичными плошками лежат в файлах типа `vcruntime140` (тут 140 это runtime library version 14)

                            До верси 2010 они лежали в WinSXS

                            >Microsoft Visual C++ 2005 and 2008 employ SxS with all C runtime libraries.

                            Начиная с Sutdio10 они стали кодировать версию в имени
                            https://govnokod.xyz/_29074/#comment-1312792
                            и их стало можно брать из system32 (куда их ставит редистрибл) или из папки самого приложения.

                            Начиная с версии 2015 (CRT 14) они все обратно совместимы
                            -------

                            Начиная с 2015 так же часть CRT перекочевала в UCRT (UCRTBASE.DLL).
                            Это аналог libc, и часть системы. оан не MS-специфична, и против нее может линковаться не только VC.

                            Редистрибутил ее тоже может поставить (если ее нет) но вообще с Win10 она сама приезжает и обновляется а апдейтом

                            VC линкуются И с vcruntime140 И с UCRTBASE.DLL (с последним -- через систему API Sets).

                            Брать vcruntime140 можно по-прежнему из папки или из system32, а вот UCRTBASE ВСЕГДА берется из системы на 10ке (на 8 нет, бо она про него ничего не знает)
                            Ответить
                            • До 10-й студии (2010) мажорный номер тоже был в версии, начиная с 7-й (2002), например, msvcr70.dll, но в пределах каждого мажорного номера были несовместимые минорные, а минорные в имени файла не отражались, поэтому их приходилось класть в winsxs (ну или с программой), чтобы ничего не сломать.
                              Ответить
                                • Я с ужасом вспоминаю времена, когда из-за изменения минорной версии рантайма падали программы и приходилось redistributable копировать в папку с программой, чтобы починить, но для этого нужно было угадать точный номер версии...

                                  Напомню нетленку:
                                  http://books.mcwees.spb.ru/?compaq.html

                                  До шестой версии вообще было одно имя MSVCRT.DLL на все версии, а они были несовместимы, и всё ломалось к хуям после запуска очередного дебильного инсталлятора. Пользователи, не знающие о таких тонких материях переустанавливали систему полностью, потом снова накатывали все программы, и... снова всё ломалось.
                                  Ответить
                                  • Потому обычно клали их в папку программы, потому что если инсталлятор ставил их в system32, то всё и падало.

                                    потом завезли WinSXS.

                                    потом отказались (решили видимо поддерживать совместимость)

                                    потом разделили на MS и UCRT
                                    Ответить
                                  • у меня есть такой файлк -- MSVCRT.dll. Версии 7.0, тоесть от студии Visual Studio .NET 2002
                                    Ответить
                                    • Какой багор )))

                                      Вот нафига так делали?
                                      Ответить
                                      • как именно? перезаписываои файлы?

                                        чтобы экономить место. почитай про dll hell.

                                        Считалось, что программист может в обратную совместимость. но разумеется он не может
                                        Ответить
                                        • Несовместимые файлы именовали одинаково. Они думали, что у меня на компе весь софт будет скомпилированный одной версией студии?
                                          Ответить
                                          • знаешь такой файлик -- `python` (или `python.exe`) на винде?
                                            а расширение `.py` знаешь?P)

                                            Так что тут оин не одиноки.

                                            Скорее всего это получалось случайно. Я поправил .dll, и выпустил новую версию. Я не имел ввиду ломать совместимость, но случайно её сломал.

                                            Жопа в том, что системные файлы пользователь ставит не из единого репозитория, а с диска с играми. Игра1 принесла одну версию, Игра2 -- другую. игра1 завязалась на баг, который пофиксили в новой версии либы, и который ломает Игра2

                                            и что делать?

                                            >Они думали, что у меня на компе весь софт будет скомпилированный одной версией студии?

                                            Именно потому я за BSD: там ровно так
                                            Ответить
                          • > a 2017 toolset (v141, versions 15.0 to 15.9)

                            Борхес рыдает.
                            Ответить
                          • не повериш

                            msvcrXXXX.dll is the DLL for the C runtime library. msvcpXXXX.dll is the DLL for the C++ runtime library.

                            только msvcr перемиеновался в vcruntime140 с версии 14, а p так и остался msvcp140
                            Ответить
                            • Спасибо, надо запомнить, что «p» — это «плюс-плюс».
                              Ответить
                              • реальныепримеры.
                                MS CRT для эскопртирует какие-то MS специфичные писки
                                __vcrt_InitializeCriticalSectionEx

                                MS-VC P эксапортирует плюсы
                                ║class std::basic_istream<char,struct std::char_traits<char> > * }

                                (они не универсальны и MS специфичны,. Чтобы писать на плюсах НЕ НА VC, тебе нужна ДРУГАЯ библиотека)

                                а ucrtbase экспортирует нормальную сишку
                                wcsnlen
                                wcspbrk
                                wcsrchr
                                wcsrtombs
                                wcsrtombs_s
                                wcsspn
                                wcsstr
                                wcstod
                                wcstof
                                wcstoimax
                                wcstok
                                wcstok_s
                                wcstol
                                wcstold
                                wcstoll
                                wcstombs
                                wcstombs_s
                                wcstoul
                                wcstoull
                                wcstoumax
                                wcsxfrm
                                wctob
                                wctomb
                                wctomb_s
                                wctrans
                                wctype

                                пиши против нее хоть на поскале
                                Ответить
                                • Наконец-то сделали по-человечески.

                                  4.0 вышла в 1995-м, UCRT завезли в 2015-м. Джвадцать лет понадобилось обезьянам, чтобы прийти к правильному решению.
                                  Ответить
                                • > экспортирует нормальную сишку

                                  К слову, это для 64-битных процессоров пришли к одному call convention (вру, не к одному, есть как минимум sysv и ms), а у 32-битных и 16-битных был зоопарк.

                                  Например, на 32-битных процессорах msvcrt была с конвенцией cdecl (чтобы её можно было подсунуть вместо статической библиотеки, почти ничего не меняя в коде), а остальные dll — с конвенцией stdcall.
                                  Ответить
                                  • угу, и не факт, что твоя либа на паскале например имела бы ту же конвенцию.

                                    потому надо было специально помечать функции
                                    Ответить
                                    • Напомнило, как я вызвал бормандовскую BWCC.DLL из Питона, чтобы закосить под Дельфи:

                                      https://govnokod.xyz/_24405/#comment-375978

                                      Со второго раза получилось. Сначала я перепутал конвенцию и нагадил в стек.
                                      Ответить
                                      • Это же говно мамонта и не Дельфи и не Быдлер, а Broland See. И не рантайм, а Common Controls.
                                        Ответить
  • On Windows 6 X64, got an error 500 on any PHP files, installing the 2015 Visual c++ Redistributables x64 solved my problem.
    Ответить
  • C++ on Mars sure ain’t using exceptions anytime soon.
    и другие практики звездолётов
    Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8