Ошибка преобразования C++ при доступе к битам для установки битового поляC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка преобразования C++ при доступе к битам для установки битового поля

Сообщение Anonymous »

Мы используем битовые поля для представления элементов регистра, считываемого с устройства.

Код: Выделить всё

#include 

struct Register {
uint8_t field : 1;
};

int main() {
uint8_t byte{0}; // Read from a device
Register r;
r.field = (byte >> 5) & 0x1; // access bit 5
r.field = (byte >> 7) & 0x1; // access bit 7, warns
}
Мы также используем флаг -Werror=conversion. По какой-то причине доступ к битам от 0 до 6 компилируется без предупреждения. Однако доступ к биту 7 предупреждает об ошибке преобразования: преобразование из «unsigned char» в «unsigned char:1» может изменить значение [-Werror=conversion].
Любой идеи, почему это может быть? Или как это исправить, чтобы не предупреждать об ошибке преобразования?
Пример здесь, https://godbolt.org/z/Ghd5ndnKd

Подробнее здесь: https://stackoverflow.com/questions/787 ... -bit-field
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»