/**
New灬狼
2016年1月5日19:40:30
*/
/*
步骤:
1,新建ArrayTest07.java
*/
class ArrayTest07
{
//toBinary定义一个功能,完成一个十进制的数转换成二进制的数;
//思路:
//十进制转换二进制就是不断的%2,这是一个重复的过程,可以用循环。
public static void toBin(int num)
{
StringBuffer sb=new StringBuffer (); //这是一个容器
//while (num>0) 这样写有局限性,不能转换负数。
while (num!=0)
{
//System.out.println(num%2);
sb.append(num%2);
//num=num/2; 这样写只能针对正数,对负数就不能用了,>>>1,带符号右移1位,相当于/2;
num=num>>>1;
}
System.out.println(sb.reverse()); //reverse 反转 注意加()
}
//decimal To Hex十进制转换为十六进制
//就是这个数&15,得到一位十六进制末位数
//然后这个数再带符号右移4位,再&15;
//因为一个decimal转换为二进制,在内存中是32位,所以右移8次后,就没有了;
public static void decimalToHex(int number)
{
StringBuffer b=new StringBuffer ();
//这里就直接改了
for (;number!=0 ; )
{
int temp =number & 15; //先取末位值
if (temp>9) //因为Hex中大于9就是字母:A,B,C,D,E,F
{
//System.out.println((char) (temp-10+'A'));
b.append((char)(temp-10+'A')); //注意转换类型的括号
}
else
//System.out.println(temp);
b.append(temp);
number =number >>> 4; //带符号右移4位;
}
System.out.println(b.reverse()); //不加reverse就是正序
}
//decimal To Octonary十进制转换为八进制
//因为八进制最大数就是7,所以decimal&7,就会得出1位八进制;
//因为1位八进制=3位二进制,所以,这个数需要>>>3;
//因为decimal在内存中是binary形式,占32位,需要右移11次。 这是错误的想法,因为八进制数可以无限大
public static void decimalToOctonary(int number)
{
StringBuffer o=new StringBuffer();
//for (int x=0;x<11;x++ )
for ( ;number!=0; ) //因为这里写x没有用,循环的条件只要这个数不等于0,就应该转
{
int temp=number&7;
//System.out.println(temp);
o.append(temp);
number =number>>>3;
}
System.out.println(o.reverse());
}
//
public static void main(String [] args)
{
toBin(6);
toBin(-6);
decimalToHex(60);
decimalToHex(-60);
decimalToOctonary(15);
decimalToOctonary(-15); //java是双字节的
}
}
|
|