1. Си / Говнокод #19559

    −45

    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
    15. 15
    16. 16
    17. 17
    18. 18
    for(x = 0; x < 27; ++ x) {
            flag = 1 << x;
            hold = 1 << i;
            if(x == z && x < 26) {
                if(!(bits & flag))
                    bits = (bits & ~(-1 << i)) | ((bits & (-1 << i)) << 1);
                bits ^= bits & flag ? bits & hold ? flag | hold : hold : flag;
                if(!(bits & flag))
                    bits = (bits & ~(-1 << i)) | ((bits & (-2 << i)) >> 1);
                hold = 1 << i;
            } else
            if(x == z)
                bits ^= flag;
            tag = szTag[x * 3 + (bits & flag ? bits & hold ? 2 :  1 : 0)];
            ListView_SetItemText(hWnd, row, x + 1, TEXT(PTCHAR(&tag)));
            if(flag & bits)
                ++ i;
        }

    "Иногда вымогает, что в операциях сдвига биты втиснуть легко лишь с начала или с конца. А вот всерёдку:"
    http://wasm.ru/forum/viewtopic.php?pid=578804#p578804

    Запостил: SadKo, 02 Марта 2016

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

    • Трудно ебать байты кандибобриком.
      Ответить
    • Здесь могло быть мое сообщение
      Ответить
    • var m = (1 << position) - 1;
      var output = ((mask & ~m) << 1) | (mask & m);
      return value ? output | (m + 1) : output;


      так же как то?
      Ответить
      • m+1 в конце странно смотрится. А так вроде должно работать. Осталось призвать Борманда с решением вдвое короче.
        Ответить
        • Можно избавиться от тернарника другим сдвигом: return output | (value << position).
          Ещё, как мне кажется, можно придумать что-то с вращением числа, но у меня не придумывается :(
          Ответить
          • Без масок, походу, никак. Половину регистра же не повернёшь ;(
            Ответить
          • value стоит энднуть с единицей.
            Ответить
            • Через & или через &&? && это тоже бранч, а & не поможет, если в value, например, двойка. Можно сделать !!value, если мы думаем, что там может быть не единица.
              Ответить
        • А че там упростишь? Левая половина, бит, правая половина... Ну вот только тернарник убрать, как ты и предложил.
          Ответить
          • Но сааааамое важное

            if ((position < 0)||(position > 31)) throw new Exception();
            var m = (1 << position) - 1;
            return ((mask & ~m) << 1) | ((value & 1) << position) | (mask & m);
            Ответить
            • А если аккумулятор 64-битный :)?
              Ответить
              • То у метода другая сигнатура. Хотя можно и через рефлексию вытащить
                Ответить
                • > рефлексия
                  > битоёбство
                  ...
                  Ответить
                  • именно!
                    Ответить
                    • Тогда уж проще список из булов... Вставлять точно проще.
                      Ответить
                      • Это шарп, детка. Тут unsafed code может юзаться рядом с рефлексией и автора это нисколько не смущает.

                        А все потому что в шарпе биты ебутся не для производительности, а для души....
                        пысы - это ты мне ошибки указал в рассказе?need more!
                        Ответить
      • return mask & ~(1 << position) | ((value & 1) << position);
        или я что-то недопонял?
        Ответить
    • >Иногда вымогает, что в операциях сдвига биты втиснуть легко лишь с начала или с конца
      >>Иногда вымогает
      Вореций вернулся??
      Ответить
      • что бы вымогать деньги у говнокодеров. Иногда
        Ответить

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