LINUX.ORG.RU

История изменений

Исправление kostyarin_, (текущая версия) :

Или для тех, кто врубился много лет назад, но все равно предпочитает чтобы в коде были человекочитаемые методы вместо операторов (которые в разных языках еще и разные).

Стиль программирования никто не отменял. Если у Вас одно вхождение – почему бы и не сделать его на операторах. Если оно слишком сложное – почему бы и не расписать его на несколько строк, констант и прокомментировать.

Читаемость кода не в битах, которые типа видны. На самом деле вот такая вот штука

val = 0b0000100

вообще не читаема по сравнению с

val = (1 << 2)

Т.к. считать нули и единицы при этом нет никакой необходимости.

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

Обычно речь идёт о какой-то маске. Или о каком-то бите (флагах). Ну или преобразовании числа в набор байтов для пересылке по сети.

Кто работает с float point в своём представлении, то это вопрос отдельный. Т.к. я с таким не сталкивался. Где-то читал, что для тестирования (+0 там или -0) используется 16-ричное представление. Я в общем не в курсе.

Набор флагов это вообще дело обычное (должно преподаваться в детском саду)

#define THE_LIB_ENABLE_ONE    (1 << 0) // 0x01
#define THE_LIB_ENABLE_TWO    (1 << 1) // 0x02
#define THE_LIB_ENABLE_THREE  (1 << 2) // 0x04
#define THE_LIB_ENABLE_FOUR   (1 << 3) // 0x08

// [...]

int
with_flags (int val, int flags) {
     return val | flags;
}

bool
is_flag_set (int val, int flag) {
    return val & flag; // (val & flag) != 0
}

// [...]

    val = with_flags (val, THE_LIB_ENABLE_TWO |  THE_LIB_ENABLE_FOUR);

// [...]

    if (is_flag_set (val, THE_LIB_ENABLE_TWO |  THE_LIB_ENABLE_FOUR)) {
        // stuff
    }

Необходимость использовать такое дерьмо 0b0000100 говорит о том, что программист нафиг слал бизнес-логику. Что и есть основа говнокода.

Исходная версия kostyarin_, :

Или для тех, кто врубился много лет назад, но все равно предпочитает чтобы в коде были человекочитаемые методы вместо операторов (которые в разных языках еще и разные).

Стиль программирования никто не отменял. Если у Вас одно вхождение – почему бы и не сделать его на операторах. Если оно слишком сложное – почему бы и не расписать его на несколько строк, констант и прокомментировать.

Читаемость кода не в битах, которые типа видны. На самом деле вот такая вот штука

val = 0b0000100

вообще не читаема по сравнению с

val = (1 << 2)

Т.к. считать нули и единицы при этом нет никакой необходимости.

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

Обычно речь идёт о какой-то маске. Или о каком-то бите (флагах). Ну или преобразовании числа в набор байтов для пересылке по сети.

Кто работает с float point в своём представлении, то это вопрос отдельный. Т.к. я с таким не сталкивался. Где-то читал, что для тестирования (+0 там или -0) используется 16-ричное представление. Я в общем не в курсе.

Набор флагов это вообще дело обычное

#define THE_LIB_ENABLE_ONE    (1 << 0) // 0x01
#define THE_LIB_ENABLE_TWO    (1 << 1) // 0x02
#define THE_LIB_ENABLE_THREE  (1 << 2) // 0x04
#define THE_LIB_ENABLE_FOUR   (1 << 3) // 0x08

// [...]

int
with_flags (int val, int flags) {
     return val | flags;
}

bool
is_flag_set (int val, int flag) {
    return val & flag; // (val & flag) != 0
}

// [...]

    val = with_flags (val, THE_LIB_ENABLE_TWO |  THE_LIB_ENABLE_FOUR);

// [...]

    if (is_flag_set (val, THE_LIB_ENABLE_TWO |  THE_LIB_ENABLE_FOUR)) {
        // stuff
    }

Необходимость использовать такое дерьмо 0b0000100 говорит о том, что программист нафиг слал бизнес-логику. Что и есть основа говнокода.