Преобразовать число в двоичную строку с полным заполнением? - PullRequest
3 голосов
/ 14 декабря 2009

У меня есть длинная переменная в Java, и я преобразую ее в двоичную строку, как

длинная переменная = 24; Long.toBinaryString (вал);

Теперь это печатает только 7 бит, но мне нужно отобразить все 64 бита, то есть также все ведущие нули, как мне этого добиться?

Причина в том, что мне нужно перебирать каждый бит и выполнять операцию в соответствии со статусом, есть ли лучший способ сделать это?

Ответы [ 6 ]

9 голосов
/ 14 декабря 2009

Если вы хотите перебрать биты, вам лучше проверить каждый бит без преобразования его в строку:

if ((val & (1L << bitPosition)) != 0)
    // etc

Но, , если вы действительно хотите двоичную строку , это самый простой способ дополнить ее нулями с нулями:

string padding = "0000000000000000000000000000000000000000000000000000000000000000";
string result = padding + Long.toBinaryString(val);
result = result.substring(result.length() - 64, result.length());  // take the right-most 64 digits
5 голосов
/ 14 декабря 2009

Вы можете использовать бинарные операторы для доступа к отдельным битам long. Следующий код печатает отдельные биты «i» как «true» или «false».

long i = 1024;
for(int n = 63; n >= 0; n--)
    System.out.println(n + ": " + ((i & (1L << n)) != 0));
1 голос
/ 22 апреля 2016

Я бы добавил немного изменений в ответ @ Роберта. Вместо того, чтобы объявлять здесь переменную заполнения, используйте Long.numberOfLeadingZeros (long).

На самом деле внутренне используются только операторы сдвига.

1 голос
/ 14 декабря 2009

Не уверен, но я думаю, что так должно быть:

int i=0, thisbit;
mask = 1;
while (i++ < 64)
{
    thisbit = var & mask;
    // check thisbit here...
    //
    var = var >>> 1;
    mask*=2;
}
0 голосов
/ 14 декабря 2009

Это будет работать;

String s =  Long.toBinaryString(val);
while (s.length() < 64)
{
    s = "0" + s;
}

Если вы хотите сделать это с помощью StringBuffer, то;

StringBuffer s =  new StringBuffer(Long.toBinaryString(val));
while (s.length() < 64)
{
    s.insert(0, "0");
}
String str = s.toString();
0 голосов
/ 14 декабря 2009

Да, см. http://java.sun.com/docs/books/tutorial/java/nutsandbolts/op3.html для получения информации о побитовых операциях.

В противном случае используйте средство форматирования: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html

...