Количество битов, используемых в int - PullRequest
4 голосов
/ 29 мая 2010

Если у вас есть двоичное число 10110, как я могу получить его, чтобы вернуть 5? например, число, которое говорит, сколько битов используется? Ниже приведены некоторые примеры:

  • 101 должен вернуть 3
  • 000000011 должен вернуть 2
  • 11100 должен вернуть 5
  • 101010101 должен вернуть 9

Как это можно получить самым простым способом на Java? Я придумал следующий метод, но могу ли я сделать это быстрее:

public static int getBitLength(int value)
{
    if (value == 0)
    {
        return 0;
    }
    int l = 1;
    if (value >>> 16 > 0) { value >>= 16; l += 16; }
    if (value >>> 8 > 0) { value >>= 8; l += 8; }
    if (value >>> 4 > 0) { value >>= 4; l += 4; }
    if (value >>> 2 > 0) { value >>= 2; l += 2; }
    if (value >>> 1 > 0) { value >>= 1; l += 1; }
    return l;
}

Ответы [ 11 ]

0 голосов
/ 29 мая 2010

Я думаю, что округленное log_2 этого числа даст вам то, что вам нужно.

Что-то вроде:

return (int)(Math.log(value) / Math.log(2)) + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...