Java 基础 Day04 进制之间的转换
一 : 十进制转换成二进制
方法一
class DomeToBin
{
public static void main(String[] args)
{
toBin(6);
}
public static void toBin(int num)
{
while(num>0)
{
// 将数据和2 求余数 得到得到二进制数
System.out.println(num%2);
// 然后 在和2求商 得到下次的的num 进行下次循环
num=num/2;
}
}
}
方法二 利用StringBuffer数组进行存储将得到的数据倒叙输出reserve()
class DomeToBin
{
public static void main(String[] args)
{
toBin(6);
}
public static void toBin(int num)
{
//01 声明StringBuffer数组进行对数据的连续存储
StringBuffer sb=new StringBuffer();
while(num>0)
{
//把数据存储在sb数组中
sb.append(num%2);
num=num/2;
}
// 利用sb的reverse方法把数组 倒叙输出
System.out.println(sb.reverse());
//输出结果是 110
}
}
二 : 十进制和十六进制的转换
class DomeToBin
{
public static void main(String[] args)
{
toHex(6);
}
方法一
/*
十进制转换成十六进制
思路
将数值与15求&得到 后四位的值 然后判断得到的值是否大于10
如果大于10 就转换成字符输出 若不是就直接输出 然后在将数据右移四位进行循环 共32位 进行8次循环
步骤
01 传入整型变量存储待算值
02 定义一个循环佛for
03 将该数与15求&判断得到的数值是否为字母若是就转换(char)( num num-10+'A')输出 若不是就直接输出
04 将数据进行右移4位 循环判断 直到循环判断完成
*/
public static void toHex(int num)
{
for(int i=0;i<8;i++)
{
int temp ;
temp=num&15;
if(temp>9)
System.out.print((char)(temp-10+'A'));
else
System.out.print(temp);
num=num>>>4;
}
}
方法二 也是利用StringBuffer 的reverse 将数组中的数据倒叙输出
public static void toHex(int num)
{
StringBuffer sb =new StringBuffer();
for(int i=0;i<8;i++)
{
int temp ;
temp=num&15;
if(temp>9)
// System.out.print((char)(temp-10+'A'));
sb.append((char)(temp-10+'A'));
else
//System.out.print(temp);
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
利用数组 查表法十进制转换成十六进制
方法一 利用 for循环遍历
class DomeToHex
{
public static void main(String[] args)
{
toHex(60);
}
/*
数组 查表法十进制转换成十六进制
思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 A B C D E F
利用数组与十六进制 的对应关系 将查到的值对应到数组上
步骤
01 定义一个char类型数组 chas 存储十六进制对应的字符 定义一个char 类型的chass数组存储查找以后的结果
02 定义一个for循环 循环8次
03 定义一个变量temp 存储 num& 15 然后把temp作为下标对应到到数组chas中去 然后就是把对应好的数组值 放到数组chass中去
04 然后就是num>>>4直到for循环结束
05 然后在遍历数组chass 找出查找的值
*/
public static void toHex(int num)
{
char[] chas={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] chass=new char[8];
int sent=0;
for(int i=0;i<8;i++)
{
int temp=num&15;
chass[sent++]=chas[temp];
num=num>>>4;
}
for(int x=0;x<sent;x++)
{
System.out.print(chass[x]);
}
}
}
方法二 利用while
class DomeToHex
{
public static void main(String[] args)
{
toHex(60);
}
/*
数组 查表法十进制转换成十六进制
思路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 5 6 7 8 9 A B C D E F
利用数组与十六进制 的对应关系 将查到的值对应到数组上
步骤
01 定义一个char类型数组 chas 存储十六进制对应的字符 定义一个char 类型的chass数组存储查找以后的结果
02 定义一个-while循环
03 定义一个变量temp 存储 num& 15 然后把temp作为下标对应到到数组chas中去 然后就是把对应好的数组值 放到数组chass中去
04 然后就是num>>>4直到for循环结束
05 然后在遍历数组chass 找出查找的值
*/
public static void toHex(int num)
{
char[] chas={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char[] chass=new char[8];
// sent 用于记录 存如chass数组的次数
int sent=0;
//定义一个while 循环可以减少 循环次数 就是但 num 右移以后 为0 时就结束本次循环 了
while(num!=0)
{
int temp=num&15;
chass[sent++]=chas[temp];
num=num>>>4;
}
//利用for循环倒叙输出chass数组的数据
for(int x=sent-1;x>=0;x--)
{
System.out.print(chass[x]);
}
}
}
三: 十进制转换成二进制
class ToBin
{
public static void main(String[] args)
{
ToBin(6);
}
/*
十进制转换成二进制
思路 和十进制转换成十六进制相同
步骤
01定义一个数组char的数组 用来存放 二进制数组 定义一个chass数组用来存储转换以后的数据
02定义一个变量 sent 用来记录转换以后的的次数
03 使用while循环 开始转换 在while里面定义一个temp的变量用来记录位移以后的数 然后在与数组chas中的数组对比
然后在把得到的数据 存入到chass数组中 然后在 让num 向右位移一位 继续循环
04 利用for循环 开始遍历chass数组 输出转换以后的数值
*/
public static void ToBin(int num)
{
char[] cha={'0','1'};
char[] chass=new char[32];
int sent=0;
while(num!=0)
{
int temp= num & 1;
chass[sent++]=cha[temp];
num= num >>> 1;
}
for(int x=sent-1;x>=0;x--)
{
System.out.print(chass[x]);
}
}
}
进制转换优化
class ArrayTest
{
public static void main(String[] args)
{
toBin(6);
//toHex(-60);
//toBa(60);
// System.out.println(Integer.toBinaryString(6));
// System.out.println(Integer.toHexString(6));
}
/*
十进制-->二进制
*/
public static void toBin(int num)
{
trans(num,1,1);
}
/*
十进制-->八进制
*/
public static void toBa(int num)
{
trans(num,7,3);
}
/*
十进制-->十六进制
*/
public static void toHex(int num)
{
trans(num,15,4);
}
public static void trans(int num,int base,int offset)
{
//首先是判断输入的数是不是0 要是0 就可以直接输出
if(num==0)
{
System.out.println(0);
return ;
}
//char[] 是用来 存放数组表的
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
//arr[]是存储临时变量
char[] arr = new char[32];
//pos 是用来作为数组arr的是下标的
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]);
}
return ;
}
}