JAVA基础之进制转换,查表法的应用

来源:互联网 发布:软件开发标准流程 编辑:程序博客网 时间:2024/05/16 17:48
综合练习,进制转换,查表法的应用。
将一个整数转换为16进制数。


比如将60转换为16进制的数。
*/
public static void suiBian(int a)
{
if (a==0)//如果a=0,我们就直接输出0,不必在下面继续执行。
{
System.out.println('0');
return;
}
char [] arr={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
//上面新建一个数组是为了方便16进制的转换。
//每个角标与其对应的值都是和16进制一样的。
//假如我们转换过来的数涉及到字母的话,可以直接用其角标
//这样16进制的字母就出来了。
char [] aee=new char[8];
//上面因为每个整数都是4个8位也就是32字节位组成,16进制是4个字节位为1位,就刚好是8位
//我们要将其转换过来的数值存储起来。
int b=aee.length;//这步其实是在做颠倒动作。b的值就是aee数组的角标长度。
while (a!=0)
{
int temp=a&15;//a&15的值赋给temp
/*这里为什么要与15  因为16进制是将4个字节位转换为一个字节位,在不改变数值的情况下
只有用与运算同时4个字节位全是true也就是1才能不改变数值,而这个数刚好就是15
同时将4个字节位截取下来,成为一个单独的数值,再转换为16进制*/
aee[--b]=arr[temp];//temp的值不管是多少都变作arr数组的角标值,对应出相应的字符。
//再将这个字符存进aee数组中。b是aee数组的角标长度,自减1后就是aee数组的最大值。
//每次循环便自减一次,就是为了将值存入时按从大到小的角标值存储。
a=a>>>4;//转换后的值存入aee数组后,a的有效位右移4位,继续转换、
//右移到无效位,也就是a等于0时,停止循环,转换结束。
}
for (int x=b;x<aee.length ;x++ )//这里是b的值已经变化,刚好是aee中无效位的后一个角标值。
{//也就是第一个有效位的角标值。b依次自增,增加的就是aee数组中的角标值。
System.out.print(aee[x]);//这里其实就是在输出aee中存储的有效位的角标对应值。
}
System.out.println();
}
/*这里我们已经看懂进制转换的代码原理,举一反三我们同样可以知道整数转换为八进制,二进制的
代码应该怎么写。*/
public static void main(String[] args) 
{

suiBian(0);
System.out.println("--------------");
erjinzhi(20);
System.out.println("--------------");
bajinzhi(20);
System.out.println("--------------");
shiliujinzhi(20);
System.out.println("--------------");
String Huanjie=xingQi(7);
System.out.println(Huanjie);
}
public static void erjinzhi(int b)
{
jinZhi(b,1,1);
}
//上是二进制调用。
public static void bajinzhi(int b)
{
jinZhi(b,7,3);
}
//上是八进制调用
public static void shiliujinzhi(int b)
{
jinZhi(b,15,4);
}
//上是十六进制调用


public static void jinZhi(int a,int Yu,int Youyi)
{
if (a==0)
{
System.out.println('0');
return;
}
char [] arr={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char [] aee=new char[8];
int b=aee.length;
while (a!=0)
{
int temp=a&Yu;//十六进制是四位字节变一位,八进制是三位字节变一位,二进制是一位字节。
//进制不同,与的数值也不同,我们设置变量。
aee[--b]=arr[temp];
a=a>>>Youyi;//进制不同,右移位数也不同。八进制右移3位,二进制右移一位。同样设置变量。
}
for (int x=b;x<aee.length ;x++ )
{
System.out.print(aee[x]);
}
System.out.println();
}
/*查表法练习,星期。*/
public static String xingQi(int a)
{
if (a>7|a<1)
{
return "输入错误。";
}
String[] b={"","星期一","星期二","星期三","星期四","星期五","星期六","星期天"};
return b[a];
}

0 0