Integer.toString()方法的一点疑问

xiayunice 2011-10-02 12:23:24

public static String toString(int i, int radix) {

if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
radix = 10;

/* Use the faster version */
if (radix == 10) {
return toString(i);
}

char buf[] = new char[33];
boolean negative = (i < 0);
int charPos = 32;

if (!negative) {
i = -i;
}

while (i <= -radix) {
buf[charPos--] = digits[-(i % radix)];
i = i / radix;
}
buf[charPos] = digits[-i];

if (negative) {
buf[--charPos] = '-';
}

return new String(buf, charPos, (33 - charPos));
}


其中,为什么要将 i转化成负数处理?
...全文
155 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
打油的程序员 2011-10-02
  • 打赏
  • 举报
回复
这个程序是不是进制转换工具,
如果是的话,你可以使正数和负数分开处理。
原程序作者是把整数统一转为负数数再进行处理
你也可以统一转为正数再进行处理,比如:



public class TestConvertion {

public static void main(String[] args) {

System.out.println("\n---正数------");
for (int i = 2; i <= 36; i++) {// 测试100的 2进制 3进制 .....36进制
System.out.printf(" %2d进制:%7s", i,convert(100, i));
if (i % 6 == 1)
System.out.println();
}
System.out.println("\n---负数------");
for (int i = 2; i <= 36; i++) {// 测试-100的 2进制 3进制 .....36进制
System.out.printf(" %2d进制:%7s", i,convert(-100, i));
if (i % 6 == 1)
System.out.println();
}

}

/**
* @param decimal:要转换的数
* @param radix:找转换的进制
* @return:转换成功后的数据
*/
static String convert(int decimal, int radix) {
if (radix < 2 || radix > 36)
throw new UnsupportedOperationException("输入错误");
// 十进制的数 允许转化成2进制 3进制 .....36进制,
// 并且以字符串形式返回
char[] a = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
int dividend = decimal < 0 ? -decimal : decimal;// 被除数,有可能是负数
int divider = radix; // 除数
int quotient = 0;// 商
int remainder = 0;
String result = "";
while ((quotient = dividend / divider) != 0) {
remainder = dividend % divider;
result = a[remainder] + result;
dividend = quotient;// 重新初始化,更新被除数
}
remainder = dividend % divider;
result = a[remainder] + result;

if (decimal < 0)
return '-' + result;// 如果是负数
return result;
}
}
/*

---正数------
2进制:1100100 3进制: 10201 4进制: 1210 5进制: 400 6进制: 244 7进制: 202
8进制: 144 9进制: 121 10进制: 100 11进制: 91 12进制: 84 13进制: 79
14进制: 72 15进制: 6A 16进制: 64 17进制: 5F 18进制: 5A 19进制: 55
20进制: 50 21进制: 4G 22进制: 4C 23进制: 48 24进制: 44 25进制: 40
26进制: 3M 27进制: 3J 28进制: 3G 29进制: 3D 30进制: 3A 31进制: 37
32进制: 34 33进制: 31 34进制: 2W 35进制: 2U 36进制: 2S
---负数------
2进制:-1100100 3进制: -10201 4进制: -1210 5进制: -400 6进制: -244 7进制: -202
8进制: -144 9进制: -121 10进制: -100 11进制: -91 12进制: -84 13进制: -79
14进制: -72 15进制: -6A 16进制: -64 17进制: -5F 18进制: -5A 19进制: -55
20进制: -50 21进制: -4G 22进制: -4C 23进制: -48 24进制: -44 25进制: -40
26进制: -3M 27进制: -3J 28进制: -3G 29进制: -3D 30进制: -3A 31进制: -37
32进制: -34 33进制: -31 34进制: -2W 35进制: -2U 36进制: -2S
*/










xiayunice 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k3108001263 的回复:]

这个程序是不是进制转换工具,
如果是的话,你可以使正数和负数分开处理。
原程序作者是把整数统一转为负数数再进行处理
你也可以统一转为正数再进行处理,比如:

Java code


public class TestConvertion {

public static void main(String[] args) {

System.out.println("……
[/Quote]
恩,明白了,一开始理解错了,以为转化成负数处理的话效率可能会高点。

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧