您的位置:首页 > 其它

查表法进行——进制转换

2012-07-10 12:12 148 查看
我就用绝招试试手——

1. 什么是查表法:

通过容器将对应的关系进行存储。通过运算得出相应关系中的其中一方的结果,再通过这个结果去容器中找对应的另一个内容。



可以这样理解:

在库房里有六个箱子,对每箱子都进行了编号,当我们要找某个箱子时,可以根据对应的编号到库房里去找相应的箱子!

2. 查表法的特点——

a) 有对应的关系——方便查询;

b) 必须要有容器——方便存储!

3. 查表法什么时候用?

当分析的问题当中存在映射关系时,可以使用查表法;

对于映射关系,如果对应的一方是有序的编号,比如数组的角标。 这时可以使用数组作为这个关系的容器将对应关系进行存储。数组就可以作为这些映射关系的存储表

4. 查表法如何用——

a) 下面通过具体的实例进行说明:

用查表法进行——进制的转换;

查表法的引出;

当我们要将十进制转换为 十六进制的时候 我们要做哪些事情呢?

以十进制60 为例:

60在内存中表示为



要进行除16 的操作,我们可以用移位操作,以4为单位向右移动!取出最低四位,然后再接着取下一个四位——用& 操作,完成



根据这个思路,接下来完成代码:

class jzDemo3 
{
	public static void main(String[] args) 
	{
		toHex(-60000);
	}
	public static void toHex(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]; //字符数组在被定义后,它的默认初始化值为'\u0000'相当于空格。
		int pos = arr.length  ; 
		// 接下来 就要把 查到的字符 存到arr[] 中来,也就是要解决一个存储的问题。
		while(num != 0)
		{
			// num 是 移动后 前面的二进制位,temp 是 运算后得到的数
			int temp = num & 15;
			arr[--pos] = chs[temp];
			num = num >>> 4;
		}
		//存储数据的arr数组遍历
		for(int x = pos; x < arr.length ; x++)
		{
			System.out.print(arr[x]);
		}
		System.out.println();
	}
}


基本功能完成后对代码进行优化,现在只能进行十进制————十六进制,优化有可以完成十进制——十六进制 or 八进制 or 二进制的转换。

因为二进制 0 , 1

八进制 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7

这些在char [chs]里面都有所以不需要再次定义。

在进行转十六进制时右移4位,转八进制时右移3位,转二进制时右移1位,根据这个特点,进行优化:

class jzDemo4 
{
	public static void main(String[] args) 
	{
		toBin(6);
		toHex(60);
		toBa(30);
		System.out.println("Hello World!");
	}
	//转2
	public static void toBin(int num)
	{
		trans(num , 1, 1);
	}
	//转16
	public static void toHex(int num)
	{
		trans(num , 15, 4);
	}
	//转8
	public static void toBa(int num)
	{
		trans(num , 7, 3);
	}
	public static void trans(int num , int base , int offset)
	{
		if(num == 0)
		{
			System.out.println(0);
			return ;
		}
		char[] chs = {'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(num != 0)
		{
			int temp = num & base;
			arr[--pos] = chs[temp];
			num = num>>> offset ;
		}
		for(int x = pos ; x < arr.length ; x++)
		{
			System.out.print(arr[x]);
		}

		System.out.println();
	}
}


到此,用查表法 已经基本实现 进制的转换,当中尚有诸多漏洞,将在接下来修改!

敬请期待————
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: