我在java中有一個很長的變量,並將其轉換爲二進制字符串,如用全部填充將數字轉換爲二進制字符串?
long var = 24; Long.toBinaryString(val);
現在這隻打印7位,但我需要顯示所有的64位,即所有的前導零,我怎麼能做到這一點?
原因是我需要遍歷每一位,並根據狀態執行操作,有沒有更好的方法來做到這一點?
我在java中有一個很長的變量,並將其轉換爲二進制字符串,如用全部填充將數字轉換爲二進制字符串?
long var = 24; Long.toBinaryString(val);
現在這隻打印7位,但我需要顯示所有的64位,即所有的前導零,我怎麼能做到這一點?
原因是我需要遍歷每一位,並根據狀態執行操作,有沒有更好的方法來做到這一點?
如果你想通過位迭代,你可能會更好測試的每一位沒有它轉換成字符串:
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
您可以使用二進制運算符來訪問一個長的各個位。以下代碼將「i」的各個位打印爲「true」或「false」。
long i = 1024;
for(int n = 63; n >= 0; n--)
System.out.println(n + ": " + ((i & (1L << n)) != 0));
很酷的破解向後循環:) – nes1983 2009-12-14 14:18:08
這將工作;
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();
我會在@ Robert的答案上加上一些修改。而不是在這裏聲明填充變量,而是使用Long.numberOfLeadingZeros(long)。
其實內部它只使用移位操作符。
沒有循環,耶! O(1)FTW。 – 2009-12-14 14:26:34
確定有循環...只是由strcat/strcpys隱藏。如果你自己提供了領先的'0',那麼它的工作量大致相當。但是,這種方法很簡單。 – 2009-12-14 14:57:20