В Java хорошо работает следующее:
if (value << ~x < 0) {
// xth bit set
} else {
// xth bit not set
}
value
и x
могут быть int
или long
(и не обязательно должны быть одинаковыми).
Предостережение для не-Java-программистов : предыдущее выражение работает в Java, потому что на этом языке операторы сдвига бит применяются только к 5 (или 6, в случае long
) младшим битамправого операнда.Это неявно переводит выражение в value << (~x & 31)
(или value << (~x & 63)
, если value
равно long
).
Javascript : оно также работает в javascript (как java, только самый низкийПрименяется 5 битов числа смен).В javascript любой number
является 32-битным.
В частности, в C отрицательное число сдвигов вызывает неопределенное поведение, поэтому этот тест не обязательно будет работать (хотя это может произойти, в зависимости от вашей конкретной комбинации компилятор / процессор)).