十进制和二进制之间的相互转化
class Demo2
{
public static void main(String[] args)
{
toBinary(6); //调用了递归函数
toBin(48);
}
//十进制转换二进制
public static void toBinary(int num)
{
if(num == 0)
return ;
toBinary(num/2);
System.out.println(num%2);
}
public static void toBin(int num)
{
StringBuffer sb = new StringBuffer();
while(num > 0)
{
sb.append(num % 2);
num /= 2;
}
System.out.print(sb.reverse());
}
}
十进制和八进制的转化
class Demo2
{
public static void main(String[] args)
{
toHex(60);
System.out.println();
toHex1(60);
}
//通过查表法来进行进制转换,temp的值作为数组的索引
public static void toHex1(int num)
{
StringBuffer sb = new StringBuffer();
char[] str= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int temp;
for(int i = 0; i < 8; i++)
{
temp = num & 15;
sb.append(str[temp]);
num = num >>>4;
}
System.out.print(sb.reverse());
}
//十进制转化为十六进制
public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for(int i = 0; i < 8; i++) //int类型长度为32位,每次右移,最多需要移动八次
{
int temp = num&15; //取出最低四位
if(temp > 9)
{
//System.out.print((char)(temp-10+'A')); //最低四位是a~f的字母还是0~9的数字
sb.append ((char)(temp-10+'A'));
}
else
{
//System.out.print(temp);
sb.append(temp);
}
num = num>>> 4;
}
System.out.print(sb.reverse());
}
}
/* 进制转化的优化*/
class ArrayTest
{
public static void main(String[] args)
{
Trans(60,16,4);
Trans(60,8,3);
Trans(-60,16,4);
Trans(0,8,3);
}
//调用Trans函数完成进制转换
public static void toBin(int num)
{
Trans(num,2,1);
}
public static void Trans(int num,int base,int offset) //base代表进制
{
if(num == 0)
System.out.println(0);
int temp;
char[] str = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] pos = new char[32];
int count = 0;
while(num != 0)
{
pos[count++] = (char)(num & (base-1));
num = num >>> offset;
}
for(int i = count-1; i >= 0; i--)
System.out.print(str[pos[i]]);
System.out.println();
}
}