数组转换(二进制-八进制-十六进制)
需求:十进制转换成二进制,并打印出来。
class test
{
publicstatic void main(String[] args)
{
tobin(6);
}
/*十进制转换成二进制*/
publicstatic void tobin(int num)
{
while(num>0)//这里的局限性是数字大于0
{
system.out.println(num%2);//取余,并显示
num= num / 2;//取下一位。
}
}
}
//打印:
0
1
1
通过StringBuffer()内部函数实现:
class test
{
publicstatic void main(String[] args)
{
tobin(6);
}
/*十进制转换成二进制*/
publicstatic void tobin(int num)
{
StringBuffersb = new StringBuffer();
while(num>0)
{
//system.out.println(num%2);
sb.append(num%2);
num= num / 2;
}
}
}
//打印:
0
1
1
再对比:
class test
{
publicstatic void main(String[] args)
{
tobin(6);
}
/*十进制转换成二进制*/
publicstatic void tobin(int num)
{//StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象
StringBuffersb = new StringBuffer();//这样初始化出的StringBuffer对象是一个空的对象。即把sb存放在一个容器。而这个容器可以存放字符串。
while(num>0)
{
//system.out.println(num%2);
sb.append(num%2);/*append该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串连接。调用该方法以后,StringBuffer对象的内容也发生改变,例如:
StringBuffersb = new StringBuffer(“abc”);
sb.append(true);//则对象sb的值将变成”abctrue”。*/
num= num / 2;
}
system.out.println(sb.reverse());//reverse用于字符串反转.原本是011,反转变成110
}
}
//打印:
110
精简版!!!十进制转换成二进制
Dec2Bin(int num){
while(num/2>0){
sb.append(num%2);
sb.reverse();
//查表法:将所以的元素临时存储起来,建立对应关系。
每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。
0 1 2 3 4 5 6 7 8 9 A B C D E F(16进制)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15(10进制,也相当于角标)
这个表怎么建立呢?
可以通过数组的形式来定义。
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
for(intx=0;x<8;x++)
{
inttemp=num&15;//把temp强制转换成了int型。取num的低四位
system.out.println(chs[temp]);//temp作为角标,对应数组中的字符。
num=num>>>4;//强制高位补0
}
}
}
//打印:
C
3
0
0
0
0
0
0
发现终于出结果了。但是是反着的。想要正过来呢?可以通过StringBuffer reverse功能实现。
但是这个工具还没有学习。
所以可以使用已经学习过的容器:数组来完成存储。
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
//定义一个临时容器。可以存储8个字符,
char[]arr=new char[8];
for(intx=0;x<8;x++)
{
inttemp=num&15;
//system.out.println(chs[temp]);
arr[x]=chs[temp];
num=num>>>4;
}
}
//把存储数据的arr数据遍历一下。
for(intx=0;x
{
system.out.print(arr[x]+",");
}
}
//打印:
C,3,0,0,0,0,0,0,
发现终于出结果了。但是是反着的。想要正过来呢?
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
char[]arr=new char[8];
for(intx=0;x<8;x++)
{
inttemp=num&15;
arr[x]=chs[temp];
num=num>>>4;
}
}
for(intx=arr.length-1;x>=0;x--)//从角标最大的开始读,相当于倒过来了的意思。
{
system.out.print(arr[x]+",");
}
}
//打印:
0,0,0,0,0,0,3,C
我不想要多余的0,怎么办?
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
//定义一个临时容器。
char[]arr=new char[8];//字符数组的默认值为'\u0000',打印的时候显示成空格。
intpos=0;//指针,对应指向有效位的元素。
while(num!=0)//判断取的低四位不为0,即为有效位。
{
inttemp=num&15;
arr[pos++]=chrs[temp];//相当于arr[0]=C;然后pos++,即pos=1;
num=num>>>4;
}
}
//把存储数据的arr数据遍历一下。
for(intx=arr.length-1;x>=0;x--)
{
system.out.print(arr[x]+",");
}
}
//打印:
, ,, , , ,3,C,
怎么去掉空格的值:?
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
char[]arr=new char[8];//字符数组的默认值为'\u0000',打印的时候显示成空格。
intpos=0;//指针
while(num!=0)
{
inttemp=num&15;
arr[pos++]=chrs[temp];
num=num>>>4;
}
}
//把存储数据的arr数据遍历一下。
for(intx=pos-1;x>=0;x--)// arr[pos++]执行完后,pos会自增1.所以用pos-1取得字符
{
system.out.print(arr[x]+",");
}
}
//打印:
3,C,
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
//定义一个临时容器。
char[]arr=new char[8];//字符数组的默认值为'\u0000',打印的时候显示成空格。
intpos=length-1;//指针
while(num!=0)
{
inttemp=num&15;
arr[pos--]=chrs[temp];
num=num>>>4;
}
}
system.out.println("pos="+pos);
for(intx=pos;x
{
system.out.print(arr[x]+",");
}
}
//打印:
pos=5;
,3,C,
终极版本!!!!!!!
class test
{
publicstatic void main(String[] args)
{
tohex(60);
}
publicstatic void tohex(int num)
{
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
//定义一个临时容器。
char[]arr=new char[8];//字符数组的默认值为'\u0000',打印的时候显示成空格。
intpos=length;//指针
while(num!=0)
{
inttemp=num&15;
//system.out.println(chs[temp]);
arr[--pos]=chrs[temp];//pos先减1,变成arr[7]
num=num>>>4;
}
}
system.out.println("pos="+pos);
for(intx=pos;x
{
system.out.print(arr[x]+",");
}
}
//打印:
pos=6;
3,C,
class test
{
publicstatic void main(String[] args)
{
tobin(6);
}
publicstatic void tobin(int num)
{
char[]chrs={'0','1'};
//定义一个临时存储容器。
char[]arr=new char[32];//一个整数32个位,即int型,4个8位。
//定义一个操作数组的指针
intpos=arr.length;//指针
while(num!=0)
{
inttemp=num&1;//二进制&1,八进制&7,十六进制&15
arr[--pos]=chrs[temp];
num=num>>>1;
}
}
//把存储数据的arr数据遍历一下。
for(intx=0;x
{
system.out.print(arr[x]);
}
}
//打印:
(这里代表空格) 110
class test
{
publicstatic void main(String[] args)
{
tobin(6);
tohex(60);
toba(60);
}
//十进制转二进制
publicstatic void tobin(int num)
{
trans(num,1,1);
}
//十进制转十六进制
publicstatic void toba(int num)
{
trans(num,7,3);
}
//十进制转十六进制
publicstatic void tohex(int num)
{
trans(num,15,4);
}
publicstatic void trans(int num,int base,int offset)//与的基数base。位移的数offset
{
if(num==0)
{
system.out.println(0);//提前判断是否为0
return0;
}
char[]chs={'0','1','2','3','4','5','6','7','8','9','A','B'.'C','D','E','F'};
//定义一个临时存储容器。
char[]arr=new char[32];//一个int型整数32个位
//定义一个操作数组的指针
intpos=arr.length;//指针
while(num!=0)
{
inttemp=num&base;
arr[--pos]=chrs[temp];
num=num>>>offset;
}
}
//把存储数据的arr数据遍历一下。
for(intx=pos;x
{
system.out.print(arr[x]);
}
}
//打印:
110
3C
74