Операция не поддерживается напрямую, поэтому вам нужно использовать маску. В зависимости от размера вашей переменной value
вам нужно выбрать маску другого размера.
Если value
равно short
, используйте 0x7FFF
; если value
равно long long
, используйте 0x7FFFFFFFFFFFFF
.
while (value != 0) {
value >>= 1;
value &= 0x7FFFFFFF;
}
В качестве альтернативы, вы можете объявить value
как беззнаковое: тогда обычное назначение shift не будет расширять знак value
. Фактически, большая часть причины, по которой оператор >>>
был добавлен в Java, заключается в отсутствии типов без знака в языке.