1. Pascal / Говнокод #15499

    +101

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    function GetBit(numBit,Val: integer):boolean;
    var
      i: integer;
    begin
      i := round(power(2,numBit-1));
      result := (i and Val) >0;
    end;

    Суровые и беспощадные битовые операции в дельфи. Причем коллега, у которого я это нашел неплохие программы пишет, во всяком случае по части удобства интерфейса мне до него далеко. Но иногда такие перлы встречаются.

    Запостил: kipar, 17 Марта 2014

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

    • спец по юзабилити, не обязан быть хорошим кодером, как и наоборот.
      >round(power(2,numBit-1));
      нах round ?
      Ответить
      • >спец по юзабилити, не обязан быть хорошим кодером, как и наоборот.
        а где-то сказано, что коллега числится на должности спеца по юзабилити?
        >нах round ?
        так ровнее, а может просто power возвращает вещественное число.
        >numBit-1
        а в паскале индексация от единицы? уже запамятовал
        Ответить
        • в строках только с 1 в 0 размер строки хранится
          Ответить
        • >так ровнее, а может просто power возвращает вещественное число.
          Именно. Это вещественная степень вещественного числа, в этом и говно.

          >а в паскале индексация от единицы? уже запамятовал
          Биты можно как угодно нумеровать. Но кстати когда я не думаю заменил это на свою няшную функцию нумерующую биты с нуля, то полчаса не мог понять что происходит.
          Ответить
    • Ынтерпрайзная макака как она есть.
      Ответить
      • Не, ынтерпрайзная макака воспользовалась бы библиотекой.
        Ответить
    • C каких это пор в Delphi отменили операторы shr / shl?

      Вся эта функция сводится к выражению (Val and (1 shl NumBit))<>0, или (Val and (1 shl (NumBit-1)))<>0 (если нумеровать биты с 1)
      Ответить
      • Блин, 10+ как Дельфу не трогал, но все еще бесит что ROL/ROR операций не включили.
        Ответить
        • > бесит что ROL/ROR операций не включили
          Ты так говоришь, как-будто в С их включили, и не приходится писать говно в духе
          a = (a << 8) | (a >> 24);
          Ответить
          • Это не говно, это интеллектуальный код
            Ответить
          • Ну так C создавался под PDP-11, а там аппаратно циклический сдвиг был только на 1 разряд и только через бит C (рассматривающийся в этом случае как виртуальный 9-й / 17-й бит "вращаемого" значения).
            Ответить
          • std::rotate + std::vector<bool>
            Ответить
        • Это хуйня, а вот отсутствие арифметического сдвига реально бесит. Он часто нужен.
          Ответить
      • Когда это ты пришвартоваться успел?
        Ответить

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