随笔-数字(任意进制)转换为十六进制数

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85000900

题目:

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:

输入:
26

输出:
“1a”
示例 2:

输入:
-1

输出:
“ffffffff”

思路:题干要求返回为int 那么最多有8个16进制;16进制中,四个二进制数表示一位16进制; 每次取余16得到的就是二进制最低四位的值,再将其转换为16进制即可;然后无符号右移四位再取最低四位,直到num==0; 对于负数的处理,只需要在第一次取余时左移一位,然后在无符号右移一位,两步处理掉符号位,取余得到的就是原本负数的二进制最低四位的值;

class Solution {
    public String toHex(int num) {
        if(num==0){ 
            return "0";
        }
        int i=8; //int 类型八个16进制数
        String s="";
        int n;
        while(i>0){
            if(num==0){ //处理掉高位的0;
                break;
            }
            if(num<0){
              int tmp=num;
              tmp=(tmp<<1)>>>1;  //先左移处理掉负号,在右移取最低四位就是num最低四位对应的二进制数;
              n=tmp%16;  
            }else{
              n=num%16;  
            }
            num=num>>>4;
            if(n<=9){
              s=n+s; 
            }else{
              n='a'+n-10; //得到对应的unicode值;
              s=(char)n+s;   
            }
            i--;
        }
        return s;
    }
}

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/85000900
今日推荐