Могу ли я безопасно скопировать младшие биты из знакового целого числа в беззнаковое путем приведения?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]
Ответить

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

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

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

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

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