2015-04-05 2 views
-4

Как ограничить подписанный int с оператором AND в C? , например.Как ограничить подписанный int с оператором AND в C?

signed int i = -300; 
signed int j = i & 0x1F; -> expected value -31 

Возможно ли это таким образом? Если нет, то что самое простое?

Обновление: Возможно ли зажать целое число со знаком в заданном диапазоне с помощью оператора &? Если не самый простой способ?

+1

Ожидаемое значение: 20. Как вы когда-нибудь получите -31 от этого? – harold

+2

Действительно, вы удалили бит знака. –

+0

Ваш вопрос мне непонятен. –

ответ

1

Непонятно, чего вы хотите достичь. Маскировка младших бит при сохранении знакового бита - это то, что вы можете сделать с одной маской на архитектурах, где int представлен как знак/величина. Весьма маловероятно, что вы будете думать об этом странном случае. Какова ваша цель?

Помните, что маскирование - это не то же самое, что ограничение диапазона. За исключением самых тривиальных случаев, ограничивая диапазон не может быть достигнуто с помощью малярной (тривиальные случаи быть ограничивающими 0..0 и ограничивая INT_MIN..INT_MAX)

Если вы просто хотите, чтобы ограничить использование диапазона это:

int j = i < -31 ? -31 : i > 31 ? 31 : i; 

Вы можете заменить любые значения int минимальными и максимальными значениями. i оценивается дважды в этом выражении: если вы подставляете сложное выражение, лучше использовать временную переменную. В некоторых случаях компилятор может генерировать код без скачков для этих тестов, забыв пробовать сделать это вручную.

Смежные вопросы