黑马程序员技术交流社区
标题:
刚入门新人求助进制转换问题
[打印本页]
作者:
范龙波
时间:
2013-1-22 04:28
标题:
刚入门新人求助进制转换问题
本帖最后由 张向辉 于 2013-1-23 09:54 编辑
//写一个 十进制转换成多禁止的 函数
class shuzhizhuanhuan
{ public static void main(String[] args)
{
zhuanhuan(886,15,4);
System.out.println();
}
public static void zhuanhuan(int key,int x,int y)
{
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr=new char[32];
int pot=arr.length-1;
while(key!=0)
{
int tem=key & x;
arr[pot--]=chs[tem];
key=(tem>>>y);
}
for(int z=pot;z<arr.length;z++) //这个代码我打印不出正确结果,看了将近半宿了,可是不知道问题出在哪里,希望得到指点。
{System.out.print(arr[z]);}
}
}
作者:
黄鸿达
时间:
2013-1-22 06:52
你的代码某个地方写错了,导致只算出1-4位的值,后面的值都没算。
//写一个 十进制转换成多禁止的 函数
class shuzhizhuanhuan
{ public static void main(String[] args)
{
zhuanhuan(886,15,4);
System.out.println();
}
public static void zhuanhuan(int key,int x,int y)
{
char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] arr=new char[32];
int pot=arr.length-1;
while(key!=0)
{
int tem=key & x;
arr[pot--]=chs[tem];
key=(
tem
>>>y);
}
for(int z=pot;z<arr.length;z++) //这个代码我打印不出正确结果,看了将近半宿了,可是不知道问题出在哪里,希望得到指点。
{System.out.print(arr[z]);}
}
}
红色字的tem改成key,你就可以没问题。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
分析下这几段
int tem=key & x;
arr[pot--]=chs[tem];
key=(
tem
>>>y);
key是886
x=15
15的二进制是1111
886的二进制表示是1101110110
按4位分隔开来开0011 -0111- 0110
第一段是 int tem=key & x;
886和15做与运算 : 0011-0111-0110
0000-0000-1111
-----------------------
0000-0000-0110
做完运算得6,而你程序的结果是6,很显然你后面的与运算都没成功,接着把6赋给tem
第二段把tem[6]值赋给数组
第三段 key=(
tem
>>>y);
这时你的tem的值是0000-0000-0110
按照
tem
>>>y 右移4位 tem 就变成0000-0000-0000 然后把0赋给key,key=0循环结束,所以你最终结果只有6.
把tem改成为key就可以了
作者:
贾文泽
时间:
2013-1-22 06:52
int tem=key & x;
arr[pot--]=chs[tem];
key=(
key
>>>y); //这里相当于给key除以16.是把传入的key左移4位,不是 tem
作者:
范龙波
时间:
2013-1-22 10:51
jy00228875 发表于 2013-1-22 06:52
你的代码某个地方写错了,导致只算出1-4位的值,后面的值都没算。
//写一个 十进制转换成多禁止的 函数
cla ...
非常感谢,昨天看了半宿都没看出哪有问题,讲的很明白理解了。
作者:
黑马刘杰
时间:
2013-1-22 14:07
本帖最后由 黑马刘杰 于 2013-1-22 14:19 编辑
有个不错的进制转换的方法,不过不能大于十进制,你看看吧
/*
* num:要转换的十进制数值
* x:进制
*/
public static void foo(int num,int x){
if (num > 0) {
foo(num / x,x);
System.out.print(num % x);
}
}
复制代码
作者:
黑马刘杰
时间:
2013-1-22 14:27
/*
* num:要转换的十进制数值
* x:进制
*/
public static void foo(int num,int x){
int tmp=0;
if (num > 0) {
foo(num / x,x);
if((tmp=num % x)>=10){
System.out.println((char)(tmp-10+'a'));
}else{
System.out.print(tmp);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2