黑马程序员技术交流社区
标题:
进制转换的问题,
[打印本页]
作者:
刘策
时间:
2013-4-3 07:44
标题:
进制转换的问题,
本帖最后由 刘策 于 2013-4-3 14:11 编辑
public class TransBinary {
public static void main(String[] args){
String arr = transBinary(-10,1,1);
System.out.println(arr);
}
public static String transBinary(int num,int offset,int count){
if(num == 0){
System.out.println(0);
return null;
}
char[] arr = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',};
char[] arrs = new char[32];
int pos = arr.length;
while(num != 0){
int temp = num & count;
arrs[--pos] = arr[temp];
num = num >>> offset;
}
return new String(arrs,pos,arr.length-1);
}
}
复制代码
为什么这个程序输入正数没有问题,可是一输入负数就挂呢,
作者:
邵震
时间:
2013-4-3 07:55
本帖最后由 邵震 于 2013-4-3 08:20 编辑
现在坑在答题
class java0403d3
{
public static void hanshu(int x,int y,int z)
{
if(x==0)
{
System.out.println("您输入的数是:"+0);
return;
}
if(y==0)
{
return;
}
System.out.print("您输入的数转换后为:");
char [] shuzu = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
char [] arr=new char [32];
int pos = arr.length;
while (x!=0)
{
int temp =x&y;
arr[--pos]=shuzu[temp];
x=x>>>z;
}
System.out.print(arr);
}
public static void to(int x,int y)
{
int a=0,b=0;
switch (y)
{
case 2:
a=1;b=1;
break;
case 8:
a=7;b=3;
break;
case 16:
a=16;b=4;
break;
default:
System.out.println("对不起老师没教我转换成你需要的这个进制的方式");
break;
}
hanshu(x,a,b);
}
public static void main(String[] args)
{
to(-10,2);//逗号前输入想转化的十进制数,逗号后输入想转换的进制数。
//逗号后面只能输入2.8.16. 输入任何非2.8.16的数字都将默认为16进制。
}
}
复制代码
说实话我也没找出你的错误在那里 这个是我自己打的 你看看吧 我这个能转换负数
作者:
杜加璇
时间:
2013-4-3 09:53
num = num >>> offset 这一步 假如你的num是负数,得到的num值会是一个很大的正数 然后你的while循环次数将会超过你的数组长度所以他会报错 在public static String transBinary(int num,int offset,int count)传参的时候你传一个很大的正数也是会报错的
作者:
随便
时间:
2013-4-3 10:02
额,这是你没有明白二进制的原理,
我就说重点吧。
负数怎么转换成二进制。
1.求绝对值的二进制
2.求其反码
3.加1
例如:-1 1的原码 0000 0001
取反:1111 1110
+1: 1111 1111
还有小数问题,代码中你还没有解决小数求二进制问题。
十进制小数转换成二进制小数的方法时:连续用基数2去乘以小数,直到乘积的小数部分等于0然后顺序取整数部分。
例如:
(0.8125)10
0.8125 x 2 = 1.625 取整数位 1
0.625 x 2 = 1.25 去整数位 1
0.25 x 2 = 0.5 取整数位 0
0.5 x 2 = 1.0 取整数位 1
(0.8125)10 = (0.1101)2 .
代码就自己实现了,能更加理解这个概念
作者:
谢波
时间:
2013-4-3 10:45
public class TransBinary {
public static void main(String[] args){
String arr = transBinary(-6,1,1);
System.out.println(arr);
}
public static String transBinary(int num,int offset,int count){
if(num == 0){
System.out.println(0);
return null;
}
char[] arr = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F',};
char[] arrs = new char[32];
int pos = arrs.length;
int times = 0;
while(num != 0){
int temp = num & count;
arrs[--pos] = arr[temp];
num = num >>> offset;
times++;
}
return new String(arrs,pos,times);
}
}
复制代码
pos应该等于arrs的长度
new String(char[] ch,int offsite,int length)最后一个参数是长度
作者:
刘策
时间:
2013-4-3 14:10
谢波 发表于 2013-4-3 10:45
pos应该等于arrs的长度
new String(char[] ch,int offsite,int length)最后一个参数是长度 ...
呵呵,以后要注意了,
作者:
胡发友
时间:
2013-4-3 14:50
数组角标可以为负数?{:soso_e132:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2