365bet官方

当前位置: 主页 > 365bet备用 >

十进制转十六进制的Java实现

时间:2020-07-08 02:49来源:原创 作者:admin 点击:
是在刷Leetcode题目的时候遇到的,先把题目贴过来:给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用?补码运算?方法。注意:示例 1:输入:26输出:"
是在刷Leetcode题目的时候遇到的,先把题目贴过来: 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用?补码运算?方法。 注意: 示例 1: 输入: 26 输出: "1a" 示例 2: 输入: -1 输出: "ffffffff" 关于进制的转换首先想到的就是不断除以十六取余,但在操作过程中负数必须要通过补码来实现,因此代码十分繁琐,考虑到补码转十六进制无论正负,可以通用一个算法,后来查阅了大神的思路,发现是可行的。 基本原理是通过按位与的操作获得每一位十六进制数,再通过右移不断作类似除以十六的操作。即将传入的数与0xF按位与,实际上可以得到除以十六后的余数,然后通过右移4位的操作将原数除以十六循环与0xF按位与即可。代码如下: char[] map={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; //十进制转16进制 public String toHex(int num) { if(num==0) return "0"; ? ? String result=""; ? ? while(num !=0){ ? ? int x=num&0xF; ? ? ? ? result=map[(x)] + result;? ? ? ? ? num=(num >>> 4); ? ? } ? ? return result; } 不禁感叹,这些基础的知识在平时运用中似乎不重要,但在大神的手中,很多地方都能以更高效的手段去解决问题,通过这个问题也复习了进制的相关知识,对补码有了更深的理解。 (责任编辑:admin)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
推荐内容