1. Python / Говнокод #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, 16 Января 2025

    Комментарии (10) 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 <limits.h>
          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). В прямом и в обратном его нету, но зато в них ноль со знаком.
        Ответить
      • Два комплимента лучше, чем Один.
        Ответить

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