Использование битовой операции для определения, является ли int степенью 2 - PullRequest
1 голос
/ 13 декабря 2011

Однажды я столкнулся с методом определения, является ли число х степенью 2, выполнив следующее:

X & (x-1), за которым следует тест 0, если результат равен 0, то это означает, что в числе только один бит 1 и что это степень 2. Но проблема в том, что это не может быть используется для подписанного int? Мне просто интересно, если единственным исключением для подписанного int является то, что это может быть только один бит со знаком, в таком случае я мог бы просто добавить еще один тест и покончить с ним. Или у него есть другие исключения, которые этот метод может не применять к подписанному int. так как я действительно хочу использовать это в Java, я надеюсь, что смогу принять это в некотором улучшенном виде. Большое спасибо.

1 Ответ

2 голосов
/ 13 декабря 2011

Это не имеет значения;просто проверить на негативы.Степень положительного числа никогда не бывает отрицательной, поэтому вы можете с уверенностью сказать, что любое отрицательное число не является степенью двойки.

...