Как я выполняю неподписанный сдвиг вправо (>>> в Java) в C/C++?

Как я выполняю неподписанный сдвиг вправо (>>> в Java) в C/C++?

24
задан Ricardo Altamirano 14 August 2012 в 17:38
поделиться

2 ответа

>>> - это беззнаковый сдвиг вправо, поэтому я думаю, что в C это будет то же самое, что

unsigned int foo;
unsigned int bar = foo >> whatever;
17
ответ дан 28 November 2019 в 23:27
поделиться

В C, чтобы получить беззнаковый сдвиг, вы просто делаете сдвиг для беззнакового типа.

unsigned int result = (unsigned int)valueToBeShifted >> shiftAmount;

Обратите внимание, что нет никакой гарантии, что >> на знаковом типе даст вам знаковый сдвиг в C - это поведение определяется реализацией. Однако большинство распространенных реализаций дают знаковый сдвиг, если тип знаковый.

27
ответ дан 28 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: