Могу ли я безопасно скопировать младшие биты из знакового целого числа в беззнаковое путем приведения?C++

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

Сообщение Anonymous »

Я хочу скопировать младшие (наименее значимые) биты B из целого числа со знаком в целое число без знака, оба имеют произвольную разрядность. Гарантируется следующее:
  • Значение целого числа со знаком находится в пределах «диапазона B», т. е. оно находится между -2B-1 и 2B-1-1 (включительно).
  • B меньше или равно разрядности обоих целочисленных типов.
  • В реализации/архитектуре используется прямой порядок байтов.
Я придумал следующее решение на основе memcpy:

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

template 
constexpr U mask() {
if constexpr (B == 8 * sizeof(U))
return std::numeric_limits::max();
else
return (static_cast(1) 

Подробнее здесь: [url]https://stackoverflow.com/questions/79809112/can-i-safely-copy-lowest-bits-from-signed-to-unsigned-integer-by-casting[/url]

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