`
wuqiwei
  • 浏览: 21139 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员—利用查表法 十进制转十六进制和二进制

 
阅读更多

 ------- android培训java培训、期待与您交流! ----------

 

class ArrayTest6//查表法 十进制十六进制和二进制

/*
因为十进制转十六进制时的temp-10+'A' 不容易想到 所以用到现在的查表法
先进行十进制转十六进制
*/
{	
	public static void main(String[] args) 
	{	
		toHex(60);
		System.out.println();
		toBin(60);
		System.out.println();
	}


	public static void toHex(int num)
	{
		//建立一个用于查询的表 表内元素也是从0角标 开始进行排序的 A=10
		char [] chs = {'0','1','2','3','4',
					  '5','6','7','8','9',
					  'A','B','C','D','E',
				      'F'};
		//定义一个临时存储器
		char [] arr = new char[8];

		//定义指针 确定存储的位置
		int pos = arr.length;

		//将十进制的二进制最后四位转化为十六进制(取余) 并且进行查表操作
		while(num!=0)
		{
		    int temp = num & 15;//先进行模以15的操作 取得余数
			arr[--pos] = chs[temp];//不要将[]写成 () 否则提示找不到符号
			num = num >>>4;
		}
		System.out.println("pos="+pos);
//在循环结束后 pos 就将有效位打印完了 所以此时的pos为6
		for (int x=pos;x<arr.length;x++)

/*如果x=pos-1 则会在结果中多出一个空格因为是先打印的角标5 角标是空的 空的原因:
就是多打印了一个为0的角标位 字符数组在内存中的默认初始化值是'\ u o o o o'(没有
空格 因为不去空格老是打印不出来)它是一个空位相当于一个空格 所以如果写pos-1
的话就会在结果中多出一个空格*/
		{
			System.out.print(arr[x]);//不换行
		}
/*
上面是倒着存储在arr数组中的c3 这里因为在while中已经将pos自减到6 所以在这里的
for循环中 x=pos=6 自增即可 打印的就是要的结果
*/
	}	
	
//十进制转换二进制
	public static void toBin(int num)
	{	
		//定义一个用于查找的数组
		char[] chs = {'0','1'}; 
		//定义一个临时存储的数组
		char[] arr = new char[32];
		//定义一个指针 用于只打印二进制的有效位
		int pos = arr.length;

		//进行while循环 实现转换过程
		while (num!=0)
		{
			int temp = num & 1;
			arr[--pos]=chs[temp];
			num = num >>>1;
		}

		for(int x=pos;x<arr.length;x++)
		{
			System.out.print(arr[x]);//不换行
		}
	}
}

 

 

  • 大小: 1.6 KB
  • 大小: 5.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics