黑马程序员技术交流社区
标题:
数组,查表法.十进制至十六进制
[打印本页]
作者:
air
时间:
2013-10-17 18:25
标题:
数组,查表法.十进制至十六进制
本帖最后由 air 于 2013-10-18 10:24 编辑
短短20分钟的视频,几个圈把我绕晕了,发狠了,听一条边写一条,然后自己在后面一行行打注释写自己的想法给自己看,可是自学啊,不知道自己想的对还是不对,只能拜托论坛里的同学了,我这样想是对的还是错的呢?class toHex
{
public static void main(String[] args) //主函数
{
toHex_2(60); //需要转换的数值
}
/*第一种方法
public static void toHex(int num)
{
StringBuffer av =new StringBuffer();
for (int x=0;x<8;x++ )
{
int temp = num&15;
if(temp>9)
av.append((char)(temp-10+'A'));
else
av.append(temp);
num = num>>> 4;
}
System.out.println(av.reverse());
}
*/
public static void toHex_2(int num) //第二种方法
{
char[] chs ={'0','1','2','3', //首先建立一张对应的表
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[] arr = new char[8];//建立一个新的数组,这个数组归属于,二进制中32位里的每4位换成1位.
int pos=arr.length; //建立一个指针,指向新建数组
while(num!=0) //在传进来的数不等于0的情况下循环
{
int temp= num & 15; //建立临时变量,这个变量就是,把传进来的数(60)与 15的结果,结果也就是arr里的其中一位
arr[--pos] = chs[temp]; //arr[先自减就是最后一位的角标],就是把上一条表达式里的temp当做一个元素写入这个arr[].
//之所以要先[--pos]的原因是,正常写的话不方便阅读,倒着写就能正着打印阅读.
num = num >>> 4; //然后把60(num)移了4个2进制位后剩余的数值继续赋给原来的60(num).才能进行下一次循环
//下一次循环,如果遍历的话,就要8次,不够灵活,所以用的while,满足条件才循环,减少循环次数.
}
for (int x=0;x<arr.length;x++)//这个for循环的目的是为了正着打印阅读,个人习惯
{
System.out.print(arr[x]); //打印最终结果
}
}
}
作者:
阿里策
时间:
2013-10-17 19:01
对啊,我觉得你理解的没有什么问题。
最后一个for循环,如果条件改成:for(x = pos; x<arr.length;x++ )效果会更好,这样打印出来的就不会有前面的那些空格了。
作者:
斗胆潇洒
时间:
2013-10-17 19:18
你理解貌似有点模糊哦,主要明白他是将原数,
在低4位的地方装换就ok了,转完了,移走,高4位到低4位,继续转
最终全移完就0了,注释要简单点嘛
public static void toHex_2(int num) //第二种方法
{
//表
char[] chs ={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'C','D','E','F'};
//16进制占4位,32位的系统能转8个
char[] arr = new char[8];
//用来移动的游标,默认在尾部
int pos=arr.length;
//转换到num为0,即转换完毕
while(num!=0)
{
//15其实就二进制4个1,即取num的低4位,即temp = xxxxxxxx & 00001111
int temp= num & 15;
//temp为num的低4位,刚好转16进制的4位,查表转换后插入arr中,arr倒插不过是为了观看方便,
//插入一个,游标左移,准备下一个位置
arr[--pos] = chs[temp];
//num的低4位已被转换,将转换的4位右移掉,那么num的高4位,就会移到低4位
//进行下一次循环的4位转换,>>>补0右移知道吧
num = num >>> 4;
}
System.out.print(Arrays.toString(arr));
}
希望对你有帮助....
作者:
王松松
时间:
2013-10-17 19:19
哥们我能说我刚刚复习完进制转换就看到你的帖子。
你以后帖代码贴在代码区吧,不然看起来很费劲。
你的理解是没问题的!加油!
作者:
air
时间:
2013-10-18 10:24
{:soso_e113:}谢谢朋友们,我明白啦~
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2