public static void main(String[] args)
{
toBin(67);
toHex(60587);
toBa(3065);
}
//转2
public static void toBin(int num)
{
trans(num , 1, 1);
}
//转16
public static void toHex(int num)
{
trans(num , 15, 4);
}
//转8
public static void toBa(int num)
{
trans(num , 7, 3);
}
public static void trans(int num , int bit , int cursor)
{
if(num == 0)
{
System.out.println(0);
return ;
}
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'}; //这个就是要查的表
char[] arr = new char[32]; //32位
int pos = 0;
while(num != 0)
{
int temp = num & bit; //用原数字和对应的进制进行&操作后,temp就是对应进制的数了
arr[pos++] = chs[temp]; //将表中对应数据赋值给数组
num = num >>> cursor ; //然后进行移位
}
//存入对应的进制数时候&是后四位后四位的进行&运算
//eg:60为0011(3)-1100(C),存进arr就是arr[0]=='C' arr[1]=='3'
//但是读的时候习惯的是正着读,所以要倒着遍历
for(int x = pos; x > -1 ; x--)
{
System.out.print(arr[x]);
}
System.out.println();
}
Q:每4位,3位,1位的进行移位的原因?
A:每4位二进制表示一个16进制数,3位二进制表示一个8进制数
Q:&15,&7,&1的原因?
A:以十六进制为例,结合上面的,因为是每4位二进制表示一个十六进制数,而15的二进制是
0000-0000 0000-0000 0000-0000 0000-1111是最大的4位二进制,这样&15的话,就可以每4位每4位的进行 4位二进制转16进制数的运算了,&7和&1同理
2141

被折叠的 条评论
为什么被折叠?



