我在java中有一个长变量,并将其转换为二进制字符串,如
long var = 24; Long.toBinaryString(VAL);
现在这只打印7位,但我需要显示所有64位,即所有前导零,我怎么能实现这一点?
原因是我需要遍历每个位并根据状态执行操作,有更好的方法吗?
答案 0 :(得分: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
答案 1 :(得分:5)
您可以使用二元运算符来访问long的各个位。以下代码将“i”的各个位打印为“true”或“false”。
long i = 1024;
for(int n = 63; n >= 0; n--)
System.out.println(n + ": " + ((i & (1L << n)) != 0));
答案 2 :(得分:1)
不确定,但我认为它应该是这样的:
int i=0, thisbit;
mask = 1;
while (i++ < 64)
{
thisbit = var & mask;
// check thisbit here...
//
var = var >>> 1;
mask*=2;
}
答案 3 :(得分:1)
我会对@ Robert的回答添加一些修改。不要在这里声明填充变量,而是使用Long.numberOfLeadingZeros(long)。
实际上,它仅在内部使用移位运算符。
答案 4 :(得分: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
答案 5 :(得分: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();