查表法进行——进制转换


我就用绝招试试手——

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();
	}
}

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

敬请期待————





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值