Как обсуждалось в Является ли сдвиг вправо неопределенным поведением, если число больше ширины типа? , сдвиг значения не определен, если число сдвигов битов превышает эффективный размер операнда.
Таким образом, в дальнейшем значение bar не определено:
bar
uint32_t foo = 123; uint32_t bar = (foo >> 33);
Хорошо ли определены такие операции смены для std::bitset? Как в:
std::bitset
std::bitset<32> foo(123); std::bitset<32> bar(foo >> 33);
А в каком официальном документе я могу найти такую информацию?
Случай явно не указан в cppreference (https://en.cppreference.com/w/cpp/utility/bitset/operator_ltltgtgt).
Стандарт определяется как 0, [bitset.members] / 9 :
bitset & operator >> = (size_t pos) noexcept; 9 Эффекты: заменяет каждый бит в позиции I в * на значение определяется следующим образом: (9.1) Если pos> = N - I, новое значение равно нулю; (9.2) Если pos
bitset & operator >> = (size_t pos) noexcept;
9 Эффекты: заменяет каждый бит в позиции I в * на значение определяется следующим образом:
(9.1) Если pos> = N - I, новое значение равно нулю;
(9.2) Если pos