2013-08-13 10 views
5

w printf() Pamiętam za niepodpisany jest %u ... ale nie mogę znaleźć takiego %u w specyfikacji dla String.format()Czy% d w String.format() działa również dla liczb całkowitych bez znaku?

więc jeśli mają dużą unsigned int następnie %d będzie działać poprawnie na nim?

+9

java nie ma liczb całkowitych bez znaku – Kevin

+0

Java 8 ma bez znaku liczby całkowite. – boring

+0

AFAIK Java 8 ma interfejs API dla typowego obejścia tego problemu bez posiadania niepodpisanych typów. –

Odpowiedz

9

Jeśli chcesz traktować int, jak gdyby był niepodpisany można, aby

int i = ... 
String s = String.format("%d", i & 0xFFFFFFFFL); 

To skutecznie odwraca podpisanego int na długo, ale to będzie od 0 .. 2^31-1

Aby zrobić odwrotnie można zrobić

int i = (int) Long.parseLong(s); 
String s2 = String.format("%d", i & 0xFFFFFFFFL); 

I s2 będzie taka sama jak s pod warunkiem, że znajduje się w zasięgu.

BTW: Najprostszą rzeczą do zrobienia może być przede wszystkim użycie long. Jeśli nie tworzysz z nich zbyt wiele, to dodatkowa pamięć jest banalna, a kod jest prostszy.

Powiązane problemy