Как я могу выполнить операцию побитового сдвига (<< или >>) непосредственно в IntVector с помощью Java Vector API?
Я не смог найти ничего очевидного в API для этого; самое близкое, что я нашел, это myIntVec.lanewise(VectorOperators.ASHR, shiftAmt)
, но оно выполняет дополнительную операцию AND
над величиной сдвига.
Поведение правильное: чистый <<
для int
s также выполняет операцию &
над величиной сдвига. &
правильно выполняет соответствующую операцию &
для обрабатываемых значений.
ASHR правильно эквивалентен >>
. LSHR эквивалентен >>>
. LSHL эквивалентен <<
. Все они делают то же самое, что и обычные операторы.
Подробнее см. JLS 15.19.
Возможно,
.mul(2)
и.div(2)
помогут.