黑马程序员技术交流社区
标题:
关于查表法的解释与分析
[打印本页]
作者:
LINUS
时间:
2013-3-22 21:06
标题:
关于查表法的解释与分析
/*
利用数组查表法,
计算十进制转十六进制.
代码自己根据自己意思写的,注释可能有不妥当的地方 ,麻烦也给指出吧...
*/
class Demo{
public static void main(String[] args){
char[] ch ={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};// 自定义 16进制 数组表
char[] chs=new char[8]; //二进制四位一组 32位 分为8组 ,新建一个叫chs数组名 分8格的 一个数组
int temp = 110;//二进制是 1101110 ,定义个变量 十进制是110
int num = 0;//定义一个变量 num 为0,
int x = 0;// 定义数组角标 x=0.
while(temp!=0){
num = temp & 15;//十六进制结果14 即为E // 十进制变量temp & 二进制1111(十进制即为15)得到结果 就是十六进制的末位数.
//chs[x++]=ch[num];
这个方法不太懂 我意思是直接可以输出 ch[num]
temp = temp >> 4;//二进制temp右移4位,转换为十进制即为 十六进制十位数.
System.out.print(ch[num]);
}
//for (int y =0;y< chs.length ;y++ ){
//System.out.print(chs[y]+",");
//}
}
}
因为上面代码运行后 十六进制没有对调
我用 数组反转 给掉一下
结果输出却不是正确的十六进制.
请教一下.
还有帮忙分析一下..
万分感谢....
作者:
lxww
时间:
2013-3-22 22:30
亲。你的好多步骤都起不到作用。我整理半天。最后还是给你写了一个,你看看。
class Test10
{
public static void main(String[] args)
{
String s1=toHex(110);
System.out.println("十进制数110转换成十六进制数为"+s1);
}
public static String toHex(int n){
String str="";
String[] tools={"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
int[] arr=new int[32];
int index=0;
for(;index<arr.length;index++){
arr[index]=n&15;
n=n>>>4;
if(n==0){
break;
}
}
for(int i=index;i>=0;i--){
int number=arr[i];
str+=tools[number];
}
return str;
}
}
作者:
曹玉龙
时间:
2013-3-22 22:54
class Demo
{
public static void main(String[] args)
{
//调用转换函数
toHex(10);
}
//用于转换并输出显示
public static void toHex(int num)
{
//定义一个存储代表十六进制符号的字符型数组
char [] arr = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
//动态初始化一个用来存储提取出最低位4个二进制数的转换值
char [] chs = new char[8] ;
//定义一个指针
int point = chs.length;
//开始转换
//num等于0的情况
if( num == 0)
{
System.out.print(0);
return ;
}
//num不等于0的情况
while (num != 0)
{
//获取最低4位的值
int temp = num & 15;
point--;
//将获得的最低4位的值存入chs
chs[point] = arr[temp];
//截去最低4位
num = num >>> 4;
}
//依次输出每一个存储的 十六进制字符
for (int x = point;x < chs.length;x++)
{
System.out.print(chs[x]);
}
}
}
复制代码
作者:
黄诗宾
时间:
2013-3-22 22:59
查表法原理:
查表原理.jpg
(56.69 KB, 下载次数: 10)
下载附件
2013-3-22 22:58 上传
代码:
/*
查表法
110十进制
编写程序,算成十六进制 6E
问题?
0-9 A-F
110--》二进制 -->十六进制(4个二进制)
位运算 & | ^ << >> >>> ~
*/
class ArrayDemo5
{
public static void main(String[] args)
{
//System.out.println(110&15);//14
//System.out.println((110>>>4 )&15);//6
//1.制作表,字符型数组‘
toHex(0B110);//JDK1.7新特性
System.out.println(Integer.toHexString(1010));
}
public static void toHex(int n)
{
char[] ch = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//2.定义数组,存储查表后的结果
char[] chs= new char[8];
int temp = n;//1101110
int num = 0;
int x = chs.length ;
while(temp!=0)//110
{
num = temp & 15;//14 6
// System.out.println(ch[num]);
chs[--x]=ch[num];
temp = temp >>> 4;//000
}
for(int y = x ; y< chs.length;y++)
{
System.out.print(chs[y]);
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2