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

    +3

    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
    private static byte shitleft(byte shiftbyte, int shiftno)
    {
        string newbyte2 = Convert.ToString(shiftbyte, 2);
        newbyte2 = newbyte2.PadLeft(8, '0');
    
        string newbyte = "";
        if (shiftno == 0) return shiftbyte;
        else if (shiftno > 7) return 0;
    
        for (int bytecount = 0 + shiftno; bytecount < shiftno + 8; bytecount++)
        {
            if (bytecount > 7) newbyte += newbyte2[bytecount - 8].ToString();
            else newbyte += newbyte2[bytecount].ToString();
        }
        return Convert.ToByte(newbyte, 2);
    }

    Циклический сдвиг. Тоже самое без проверок: (byte)((shiftbyte << shiftno) | (shiftbyte >> (8 - shiftno)))

    Запостил: Nyamka, 13 Января 2019

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

    • string newbyte2 = Convert.ToString(shiftbyte, 2);

      Это ж классика, почти как
      if ((a < b).ToString().Length == 4) // если (a < b) равно true
      Ответить
    • >> shiftno

      shiftinho
      Ответить
    • LexicalShift
      Ответить
    • следующим шагом надо сериализовать в JSON, поменять регулярками и вернуть обратно


      вот что бывает когда байтоебство прогулял, и сразу же пошел сайты делать
      Ответить
      • > сериализовать в JSON...
        ...и передать его в микросервис для сдвига.
        Ответить
    • uint8_t shiftleft(uint8_t value, uint8_t count) {
          if (!count) return value;
          uint64_t tmp = value * 0x80402010080402uLL;
          uint64_t * tmp2 = (uint64_t *)((uint8_t *)&tmp + 1);
          tmp = (tmp & 0x8FCFEFF0F8FCFEuLL) | (*tmp2 & 0x7F3F1F0F070301uLL);
          return *((uint8_t *)&tmp + (count - 1));
      }
      Ответить
      • Кстати, сдвиг через аппаратный умножитель на FPGA иногда юзают.
        Ответить
        • Пока битоёбы умножают сдвигами, гейтоёбы сдвигают умножениями.
          Ответить
          • Тут ещё результат умножения (значение переменной tmp) содержит всевозможные циклические сдвиги байта на величину от 1 до 7 битов. Его можно закэшировать на случай, если вдруг придётся снова сдвигать то же число. Да для байта можно и табличку целиком сохранить, в ней всего лишь 256 элементов.
            Ответить
    • @private static byte shitleft
      Ответить

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