Q:给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"
A:
也可用于对2进制,8进制转换。
1.维护相应的字符串2进制:“01”,8进制:“01234567”。
2.修改相应的移位位数,16进制:4位,8进制:3位,2进制:1位
代码:
位与(&):第一个操作数的的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0。
public String toHex(int num) {
StringBuilder res = new StringBuilder();
if (num == 0) {
return "0";
}
String HexString = "0123456789abcdef";
while (num != 0 && res.length < 8) {
res.insert(0, HexString.charAt(num & 0xf));//& 15
num = num >> 4;
}
return res.toString();
}
整型一共32位二进制,每4个二进制位是一位8进制,一共可以转为8位8进制,有符号右移通过sb.length() < 8判断有没有全部转化完;
无符号右移最高位补0,全部转化完后num == 0,所以通过判断最终是否为0,判断有没有转化完。
public String toHex(int num) {
StringBuilder res = new StringBuilder();
if (num == 0) {
return "0";
}
String HexString = "0123456789abcdef";
while (num != 0) {
res.insert(0, HexString.charAt(num & 0xf));
num = num >>> 4;
}
return res.toString();
}