Няшная / Говнокод #3640 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
int Xor4Bit_2 (unsigned char data)
{
     unsigned char result = data;
      while (data != 0)
     {
         result ^= data & 1;
         data >>= 1;
     }
      result &= 1;
     return result;
}

вот как студенты получают xor битов числа
это же нужно так извратить простой рабочий алгоритм
     
int Xor4Bit_2 (unsigned char data)
{
     int result = 0       
     while (data != 0)
     {
         result ^= data & 1;
         data >>= 1;
     }
     return result;
}

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

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

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

    • Неплохо...
      data = data - ((data >> 1) & 0333) - ((data >> 2) & 0111);
      data = (((data + (data >> 3)) & 0307) % 63) & 1;
      return data;
      Ответить
        • Ставка по ипотеке в России.
          А вообще - остаток от деления.
          Ответить
          • Я в курсе. Я про логическую нагрузку в данном контексте.
            Ответить
        • >% 63
          >Это что?
          Не подъёмный матан для любителей писать прозрачные легко поддерживаемые обновляемые почти безошибочные программы.
          Ответить
          • //оффтоп
            кстати по поводу матана: предлагаю разрешить анонимусам постить камменты при том, если оный прошёл матанокапчу, будет фильтровать от школоты всякой, хотя есть вероятность использования калькулятора, но до этого тяжко будет додуматся. Темболее если какое уравнение.
            Ответить
            • Я за систему векторных уравнений с интегралами и частными производными. При этом, пускай это нужно решать перед каждым постингом коммента гостю.
              После такого гости начнут постить исключительно самые полезные комменты. Редким мазохистам захочется это решить ради какого-нибудь вебкиловского говнокомента.
              Ответить
              • и ввести это в систему регистрации. Баттхёрт у сами знаете кого обеспечен ^_^
                Ответить
              • Я так и вижу PHP разработчика или например JS разработчика с легкостью решающего векторные уравнения с интегралами
                Ответить
                • КАК НА JQUERY ПОСЧИТАТЬ ЭТОТ ПРИДЕЛ???7

                  приаттачен файл Безымянный.bmp
                  Ответить
            • Мяк!
              А как быть с теми старперами, кто матан забыл еще тогда, когда ЦА капчи еще на свет не появились?:)
              Ответить
                • Да меня-то ладно, у меня по нему трояк был даже когда я его изучал:)
                  Ответить
        • > % 63 Это что?
          Остаток от деления на 077. Тут единичные биты суммируются по 3 в группе, потом берётся их общая сумма и проверяется на нечётность. Если сумма нечётная, то результат 1, иначе 0. Как-то так.
          Аналогия в десятичной системе счисления:
          203040607 % 99 == 22
          (сумма цифр в 203040607)
          Ответить
          • конечно извиняюсь, то ли я не так понял пост, то ли в посте ошибка 203040607 % 99 = 07
            имелось ввиду взятие остатка от 99 в цикле и суммирование резалтов, поскольку во втором посте делается именно это не без цикла - 07+06+04+03+2 - верно?
            Ответить
    • >>>по мне так оба гавно
      +1, в обоих случаях брутальный говноподход - в лоб
      отличный линк кстати вот это n &= (n - 1) ; // вообще гениально

      повторю свою уже стающую коронной фразу: на асме это делается в одну строку ))
      popcnt eax

      кстати по линку как использовать эту инструкцию в gnu
      GNU compiler allows for
      int __builtin_popcount (unsigned int x)

      без асма (то есть если у меня было че-нить подревней Core 2) я бы сделал наверно таблицей, как в случае 3 Precompute.
      Ответить
        • Ну это только если не нужно писать кросплатформенный код. Мне тоже ленно писать длиннющий цикл, если можно написать за строку. Действительно не во всех проектах нужна переносимость. Хотя, если над каким-то проектом планируется дороботка другим программистом, то это плохой тон.
          Ответить
    • Dummy, в студ поделках за производительностью не гоняться да и я пишу не протоколы работы с устройствами или алгоритмы шифрования/хеширования (хотя было и такое). но я точно знаю что вот это рабочее:
      int Xor4Bit_2 (unsigned char data)
      {
      int result = 0
      while (data != 0)
      {
      result ^= data & 1;
      data >>= 1;
      }
      return result;
      }

      причем сам алгоритм не зависит от типа данных
      а извращаться искать и оптимизировать нужно исходя из задачи. Я показал как можно извратить вполне рабочий алгоритм который интуитивно прост и понятен а вы тут про оптимизацию и ассемблер. Если на то уж пошло для размерности в байт самой быстрой будет табличная функция на 256 элементов но оно кому-то надо?
      Ответить
      • повторю в асме - это 1 (одна) строка, что может быть проще???

        кстати этот алгоритм тоже интуитивно просто и понятен
        int bitcount (unsigned int n) {
        int count = 0 ;
        while (n) {
        count++ ;
        n &= (n - 1) ;
        }
        return count ;
        }
        а работает раза в 2 быстрее, так что оба - говно, а еще и студентов этому учите
        после сессии сюда студенты ложили свои высеры, а теперь и преподы подключились )))
        Ответить
        • Преподы тоже высирают? Помоему не такой уж ужас. Всё же квалифицированей, чем студенты, так что им есть чему поучится.
          Ответить
          • >>не такой уж ужас
            согласен, код в принципе неплох, тут и похлеще бывает
            и все же кал, поскольку можно написать лучше/короче/быстрее
            а студенты его договняют и постят в виде своих лаб ))
            Ответить
  • data^=(data >> 16)
    data^=(data >> 8)
    data^=(data >> 4)
    data^=(data >> 2)
    data^=(data >> 1)
    return data & 1
    Ответить
    • Любите разворачивать циклы при каждом удобном и неудобном случае?
      Лучше уж что-то типа:
      for(int i=1;i<=16;i<<=1)
      	data^=(data >> i);
      return data & 1;
      Если компилятор сам не развернёт цикл, то можно будет развернуть его через шаблоны С++.
      Ответить
      • Только ради всего святого, не в Си-разделе:)
        Ответить
      • Разворачивать циклы конечно плохо, но, имхо, в данном случае читаемее получается и быстрее.

        Мне, кстати, кто-то обещался провести тесты, доказывающие, что цикл быстрее развёртки, но так и не провёл.
        Ответить

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

Где здесь C++, guest?!

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


    8