C C  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Средний  · 

Битовые операции

Тест проверяет маски и сдвиги как точные преобразования, а не набор трюков: границы счётчика, целочисленные продвижения, представление знаковых чисел, атомарное обновление флагов и стабильный внешний формат.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. Код читайте построчно: часть заданий проверяет вывод, часть — поиск дефекта, переносимость и безопасное исправление. После завершения откроются объяснения и профиль по 5 темам.
Вопрос 1 из 25
Как установить бит 5 в flags?
CC17
unsigned flags = initial_flags;
/* Нужно установить бит с номером 5, не меняя остальные. */
Вопрос 2 из 25
Как очистить бит с номером 3 в `flags`, не изменяя остальные биты?
CC17
unsigned flags = initial_flags;
/* Нужно очистить бит с номером 3, не меняя остальные. */
Вопрос 3 из 25
Как проверить, установлен ли хотя бы один бит из mask?
CC17
unsigned flags = read_flags();
unsigned mask = requested_mask;
/* Нужно проверить наличие хотя бы одного общего установленного бита. */
Вопрос 4 из 25
Как заменить поле шириной 3 бита, начинающееся с позиции 4, сохранив соседние?
CC17
unsigned flags = old_flags;
unsigned value = new_value;
/* Поле занимает биты 4, 5 и 6. Соседние биты нужно сохранить. */
Вопрос 5 из 25
Почему маска должна иметь беззнаковый тип подходящей ширины?
Вопрос 6 из 25
Когда `1u << shift` имеет неопределённое поведение?
CC17
unsigned bit = 1u << shift;
Вопрос 7 из 25
Какое шестнадцатеричное значение напечатает выражение `0x80u >> 3`?
CC17
printf("%x\n",0x80u>>3);
Вопрос 8 из 25
Почему `1 << 31` опасно при 32-битном int?
CC17
uint32_t top = 1 << 31;
Вопрос 9 из 25
Как извлечь 5-битное поле с позиции 8?
CC17
unsigned field=(x>>8)&0x1fu;
Вопрос 10 из 25
Почему правый сдвиг отрицательного signed не подходит для переносимого деления?
Вопрос 11 из 25
Как проверить, что установлены все биты mask?
CC17
if ((flags & REQUIRED) == REQUIRED) { ... }
Вопрос 12 из 25
Что делает XOR с одно-битовой маской?
CC17
flags ^= (1u<<k);
Вопрос 13 из 25
Почему состояния STOPPED/RUNNING/FAILED не стоит кодировать независимыми битами без дополнительных правил?
Вопрос 14 из 25
Какой вызов атомарно установит флаг в объекте `atomic_uint`, если дополнительная синхронизация не требуется?
CC17
atomic_uint flags;
unsigned mask = flag_to_set;
/* Дополнительных требований к порядку памяти для этого независимого флага нет. */
Вопрос 15 из 25
Как очистить набор флагов mask?
CC17
unsigned flags = current_flags;
unsigned mask = flags_to_clear;
/* Нужно очистить указанные биты, сохранив остальные. */
Вопрос 16 из 25
Как безопаснее считать младшие биты отрицательного int?
CC17
unsigned u=(unsigned)s;
unsigned low=u&0xffu;
Вопрос 17 из 25
Гарантирует ли C17 представление знакового `int` в дополнительном коде?
Вопрос 18 из 25
Какое значение представляет выражение `~0u`?
CC17
unsigned all=~0u;
Вопрос 19 из 25
Почему `~mask` может затронуть больше битов, чем ожидается для uint8_t?
CC17
uint8_t m=0x0f;
unsigned x=~m;
Вопрос 20 из 25
Можно ли сериализовать отрицательный int простым memcpy в сеть?
Вопрос 21 из 25
Как печатать uint32_t переносимо?
CC17
uint32_t value = get_value();
/* выберите переносимый вызов printf */
Вопрос 22 из 25
Как проверить требование протокола ровно 32 бита?
CC17
#include <limits.h>
#include <stdint.h>

/* Протокол требует беззнаковое поле ровно из 32 бит. */
_Static_assert(________________, "need 32 bits");
Вопрос 23 из 25
Какой тест сильнее для упаковки и распаковки поля?
Вопрос 24 из 25
Как UBSan помогает со сдвигами?
CC17
cc -fsanitize=undefined -g bits.c && ./a.out
Вопрос 25 из 25
Как увидеть маску без потери ведущих нулей?
CC17
printf("%08" PRIx32 "\n",mask);

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу