我無法找到一種方法將32位二進制補碼二進制數轉換爲java中的小數。當它應該是負數時,我得到溢出錯誤或數字非負。使用java將32位二進制補碼轉換爲十進制數
String bin = "11111111111111111111111111111110";
long foo = Long.parseLong(bin);
System.out.println(foo);
這是我嘗試過的一件事情,我想我需要使用很長時間,因爲它可以容納多達64位。任何幫助都會很棒。謝謝
我無法找到一種方法將32位二進制補碼二進制數轉換爲java中的小數。當它應該是負數時,我得到溢出錯誤或數字非負。使用java將32位二進制補碼轉換爲十進制數
String bin = "11111111111111111111111111111110";
long foo = Long.parseLong(bin);
System.out.println(foo);
這是我嘗試過的一件事情,我想我需要使用很長時間,因爲它可以容納多達64位。任何幫助都會很棒。謝謝
radix
是使用的編號系統的基礎。
public static void main(String[] args) {
int bits = (int) Long.parseLong("11111111111111111111111111111110", 2);
System.out.println(bits);
}
輸出
-2
如果你想解析一個二進制值,你需要提供兩個基數或基數。
long foo = Long.parseLong(bin, 2);
你可以看到在Java doc page一個例子:
parseLong("1100110", 2)
回報102L
。
沒有基數,它使用base-10,並且1032
將不適合long
。請注意,對於一個32位字符串,這會給你無符號的變體。如果你想在一個long
簽署的變種,您可以使用:
if (foo > 0x7fffffffL) foo = -(0x100000000L - foo);
事後調整它
或者你可以用力將其轉換爲整數,如果這是合適的:
int foo = (int)Long.parseLong(bin,2);
的要求Integer.parseInt()
得到有符號數字表示它不適用於最左邊1位的32個字符的二進制字符串。
你是正確的 - 你需要使用 「長」 在這種情況下。
既然你正在做的二進制補碼(沒有的補),你可以使用「parseLong()」與「2」基數:
public class X {
public static void main (String[] args) {
String bin = "11111111111111111111111111111110";
int i = (int)Long.parseLong(bin, 2);
System.out.println("parseInt(" + bin + ", 2)=" + i);
}
}
// Output:
parseInt(11111111111111111111111111111110, 2)=-2
一個32位二進制補碼數是' int'。 – 2014-11-25 03:59:49