本帖最后由 黑马-陈思源 于 2013-3-25 21:10 编辑
class jinzhi
{
public static void main(String[] args)
{
//ToBin(16);
//ToHex(60);
//ToHex_CheckT(60);
ToBin_CheckT(-6);
}
//十进制转二进制的函数
//思路:十进制转二进制就是除2取模的过程
public static void ToBin(int num)
{
//定义一个容器
StringBuffer sb=new StringBuffer();
while(num>0)
{
sb.append(num%2);
num=num/2;
}
System.out.println(sb.reverse());
}
//十进制转二进制的函数 查表法
//思路 参照转十六进制
public static void ToBin_CheckT(int num)
{
//定义一个表
char[] chs={'0','1'};
char[] arr=new char[32];//二进制能装32个十进制的数 int型 32位。 long才是 64位 满。
int pos=arr.length;//定义一个长度
while(num!=0)
{
int temp=num&1;//每次取2的模 (每次&1)
arr[--pos]=chs[temp];//while循环中数组循环赋值
num=num>>>1;//每次循环除2(每次右移一位)
}
System.out.println("你所输入的十进制数转换为二进制为:");
//遍历数组
for(int i=pos;i<arr.length;i++)
{
System.out.print(arr+",");
}
}
//十进制转十六进制的函数
//思路:(temp-10+'A') 意思是 得出十六进制中超过9的子母部分。
public static void ToHex(int num)
{
StringBuffer sb=new StringBuffer();
for(int i=0;i<8;i++)
{
int temp=num & 15;
if(temp>9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp);
num=num>>>4;
}
System.out.println(sb.reverse());
}
//十进制转十六进制的函数 查表法!!!
//0 1 2 3 4 5 6 7 8 9 A B C D E F
//0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//一一对应 就可以把0到F保存到一个数组中 实现 该函数。
public static void ToHex_CheckT(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];
int pos=arr.length;//定义一个长度
while(num!=0)
{
int temp=num & 15;
arr[--pos]=chs[temp];//while循环中数组循环赋值
num=num>>>4;//每次循环右移4位
}
System.out.println("你所输入的十进制数转换为十六进制为:");
//遍历数组
for(int i=pos;i<arr.length;i++)
{
if(i==arr.length-1)//最后一位不带逗号
System.out.print(arr);
else
System.out.print(arr+",");
}
}
}
ps:请教一下。关于十进制转换为不同的进制的时候 位移几位 是根据什么来定的?
|