Mam binarny represenation numeru i chcą przekształcić go długo (mam Java 8)Java - przetwarza binarne długo
public class TestLongs {
public static void main(String[] args){
String a = Long.toBinaryString(Long.parseLong("-1")); // 1111111111111111111111111111111111111111111111111111111111111111
System.out.println(a);
System.out.println(Long.parseLong(a, 2));// ??? but Long.parseUnsignedLong(a, 2) works
}
}
Ten kod powoduje Exception in thread "main" java.lang.NumberFormatException: For input string: "1111111111111111111111111111111111111111111111111111111111111111" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 1111111111111111111111111111111111111111111111111111111111111111 at java.lang.Long.parseLong(Long.java:592)
Co jest źle tutaj? Dlaczego Long.parseLong (a, 2) nie działa?
to co jest różnica między Long.parseLong i Long.parseUnsignedLong? czy "Bez znaku" odnosi się do reprezentacji binarnej lub długiej wartości? –
@android_dev parseUnsignedLong oczekuje traktowania długich wartości tak, jakby były niepodpisane. –
'Long.parseUnsignedLong' traktuje wyjście' long' jako niepodpisaną wartość, więc gdy potraktujesz wartość 'long' jako unsigned, maksymalna możliwa wartość stanie się 2^64-1 (reprezentowana przez 64 1-bity), dlatego dozwolony jest ciąg 64 1 s. @android_dev – Eran