Количество битов, используемых в long - java - PullRequest
2 голосов
/ 29 ноября 2010

Я хочу знать количество битов, действительно используемых в длинном типе данных в Java.Например:

long time = System.currentTimeMillis();
System.out.println(java.lang.Long.toHexString(time));

Вывод:
12c95165393

Здесь вы можете видеть, что он имеет только 11 шестнадцатеричных цифр, что означает, что используются только 44 бита из 64.10 битов до сих пор не используются.Есть ли способ узнать во время выполнения, сколько битов используется ИЛИ для заполнения оставшихся битов?

Ответы [ 7 ]

5 голосов
/ 29 ноября 2010

Попробуйте Long.numberOfLeadingZeros ():

long time = System.currentTimeMillis(); System.out.println(Long.numberOfLeadingZeros(time));

Для используемых бит: Long.SIZE - Long.numberOfLeadingZeros(time)

1 голос
/ 29 ноября 2010

Согласно API для 'toHexString', ведущие нули удаляются.http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Long.html#toHexString(long)

Поэтому вы не можете ответить на этот вопрос с помощью метода toHexString.

0 голосов
/ 10 августа 2012

Согласно документации Java , переменная типа long всегда имеет длину 64 бита. Если вы хотите посчитать количество битов между младшим значащим битом и первым старшим значащим битом, установленным в 1, то вы можете вычислить:

int usedBits( long time )
{
    if( time != 0 )
        return (int)( Math.log( time ) / Math.log( 2 ) ) + 1;
    else
        return 0;
}
0 голосов
/ 29 ноября 2010

Количество используемых битов всегда равно 64. Количество установленных битов может быть 0 и 64 (вы должны предполагать, что это может быть что-нибудь еще). Набор верхних битов может быть определен, но вряд ли будет полезным. Короче, вам не нужно знать.

Если вы хотите напечатать довольно случайное число с фиксированной шириной цифр или в шестнадцатеричном формате, это проблема печати / форматирования, и вы можете определить это с помощью printf.

0 голосов
/ 29 ноября 2010

Код:

String minBin=Long.toBinaryString(Long.MIN_VALUE),maxBin=Long.toBinaryString(Long.MAX_VALUE);
System.out.println("Number of bits in Min Long : "+minBin.length()+", Max Long : "+maxBin.length());

Выход:

Number of bits in Min Long : 64, Max Long : 63 //1 extra bit in min long to represent sign
0 голосов
/ 29 ноября 2010

Вы можете отформатировать его с заполнением, используя String.format:

System.out.println(String.format("%016x", time));

Если вы хотите узнать, сколько старших битов не установлено, вы можете проверить биты по отдельности или сдвинуть число вправо.(с >>>, а не >>) до нуля.

0 голосов
/ 29 ноября 2010

В вашем примере всего 11 шестнадцатеричных цифр, потому что toHexString не выводит начальные нули.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...