2013-08-13 2 views
5

в printf() я помню, для неподписанных есть %u ... но я не могу найти в спецификации нет такого %u для String.format()делает% d в String.format() также для целых чисел без знака?

так, если у меня есть большой unsigned Int тогда %d будет корректно работать на нем?

+9

java не имеет целых без знака – Kevin

+0

Java 8 имеет целые без знака. – boring

+0

AFAIK Java 8 имеет API для общего обходного пути для отсутствия неподписанных типов. –

ответ

9

Если вы хотите, чтобы лечить Int, как если бы оно было без подписи вы можете

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

Это фактически превращает подписанный Int в длинный, но это будет от 0 .. 2^31-1

Чтобы сделать наоборот вы можете сделать

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

И s2 будет такой же, как s при условии, что находится в пределах досягаемости.

BTW: Проще всего сделать это, возможно, в первую очередь использовать long. Если вы не создаете много, то дополнительная память тривиальна, а код проще.

Смежные вопросы