在介绍这个方法之前,我想来介绍一下移位运算符
移位运算符分为左移和右移
左移:相当于把当前的数值的二进制位数左移移位,末尾进行0补齐
右移:相当于把当前的数值的二进制位数右移移位,分为逻辑右移和算数右移
算术右移(>>):若是无符号数,则空缺补0,若是负数,空缺补1
逻辑右移(>>>):不管是什么类型,空缺自动补0
例如:i=15(0000 1111),移位两位 i>>2 ,i变为0000 0011(3)
一般在实际操作中多用>>>
算法思想
如果是要转换为16进制,则我们把要进行转换的数值num与15(1111)进行‘与’运算,得到的结果正好是末尾4位的二进制值,然后用10进制能够进行表示,然后我们把num>>>4,把新得到的最后4位来再次进行计算来结果,如果num为0则不必再进行移位操作。同理转换为8进制或者2进制,我们只需要把进行15(1111)依次的变为7(111)/1(1),然后相应的移位的位数进行修改即可
代码
/*base代表满多少进1,offset代表右移多少位数*/
public static void trans(int num,int base ,int offset)
{
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];//因为int是4个字节是32位
int pos = arr.length;
while (num!=0)
{
int temp = num & base; //与当前位数进行‘与’运算求得最后4/3/1位数的结果
arr[--pos] = chs[temp];//逆置存储得到的结果
num = num >>> offset; //右移
}
for(int x =pos;x<arr.length;x++)
System.out.print(arr[x]);
System.out.println();
}