您的位置:首页 > 编程语言 > Java开发

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

2016-05-22 13:20 447 查看
综合练习,进制转换,查表法的应用。

将一个整数转换为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];

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