Узнайте количество битов, необходимых для представления положительного целого числа в двоичном коде? - PullRequest
28 голосов
/ 25 марта 2009

Это, вероятно, довольно просто, но чтобы сэкономить мне час или около того горя, кто-нибудь может сказать мне, как вы можете определить количество бит, необходимое для представления заданного положительного целого числа в Java?

например. Я получаю десятичную 11, (1011). Мне нужно получить ответ, 4.

Я подумал, что смогу решить, как установить все биты, кроме самого старшего, в 0, и затем >>> it, я получу свой ответ. Но ... я не могу.

Ответы [ 14 ]

0 голосов
/ 13 октября 2018

Этот работает для меня!

int numberOfBitsRequired(int n)
{
    return (int)Math.floor(Math.log(n)/Math.log(2)) + 1;
}

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

public static int numberOfBitsRequiredSigned(int n)
{
    return (int)Math.floor(Math.log(Math.abs(n))/Math.log(2)) + 2;
}
0 голосов
/ 20 ноября 2013

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

public static int getNumberOfBits(int N) {
    int bits = 0;
        while(Math.pow(2, bits) <= N){
           bits++;
       }
       return bits;
}

Я знаю, что вы ищете способ не использовать циклы, но я чувствую, что это довольно прямолинейно, иначе биты - это всего лишь две от степени числа.

0 голосов
/ 25 марта 2009
(int) Math.ceil((Math.log(n) / Math.log(2))

Конечно, это работает только для натуральных чисел.

0 голосов
/ 25 марта 2009

Это на C, но я подозреваю, что вы можете довольно легко конвертировать в Java:

Найти логическую базу 2 N-разрядного целого числа в O (lg (N)) операциях

...