3

我在java中有一个长变量并将其转换为二进制字符串,例如

长变量 = 24; Long.toBinaryString(val);

现在这仅打印 7 位,但我需要显示所有 64 位,即所有前导零,我该如何实现呢?

原因是我需要遍历每个位并根据状态执行操作,有更好的方法吗?

4

6 回答 6

9

如果您想遍历这些位,最好不要将其转换为字符串来测试每个位:

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
于 2009-12-14T14:21:54.527 回答
5

您可以使用二元运算符来访问 long 的各个位。以下代码将“i”的各个位打印为“true”或“false”。

long i = 1024;
for(int n = 63; n >= 0; n--)
    System.out.println(n + ": " + ((i & (1L << n)) != 0));
于 2009-12-14T14:06:13.387 回答
1

不确定,但我认为应该是这样的:

int i=0, thisbit;
mask = 1;
while (i++ < 64)
{
    thisbit = var & mask;
    // check thisbit here...
    //
    var = var >>> 1;
    mask*=2;
}
于 2009-12-14T14:10:59.463 回答
1

我会在@Robert 的答案上添加一点修改。不要在这里声明填充变量,而是使用 Long.numberOfLeadingZeros(long)。

实际上在内部它只使用移位运算符。

于 2016-04-22T02:20:26.250 回答
0

这将起作用;

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();
于 2009-12-14T17:31:10.683 回答
0

是的,有关按位运算的信息,请参见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

于 2009-12-14T14:01:19.560 回答