Почему выражение (-1 >>> 32)
в Java оценивается как -1
вместо 0
как и ожидалось? Оператор >>>
-shift должен заполнить предварительные 0 с, поэтому результат должен иметь все биты, установленные на 0.(-1 >>> 32) == -1?
Это странно, потому что это нарушает семантику >>>
: например. (-1 >>> x)
имеет первые x бит, равные 0 для всех 0 <= x <= 31
. Единственным (неожиданным) исключением является 32.
Является ли это преднамеренное поведение, ошибка или оптимизация компилятора?
Я использовал выражение ~(-1 >>> x)
для расширения маски cidr-netmask до 32-битного эквивалента, но, как кажется,/32-маски необходимо обрабатывать отдельно.
thx для вашего ответа и извините за отправку повторяющихся вопросов. это объясняет это хорошо. – paranoid