给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
“1a”
示例 2:
输入:
-1
输出:
“ffffffff”
负整数补码运算 :符号位不变,其余的0变1 1变0;再+1
例如 -1=(1000 0000 0000 0001)2
1111 1111 1111 1110(符号位不变,其余的0变1 1变0)
1111 1111 1111 1111(+1得到)
十六进制:ffff
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
JAVA中运算符:
~ 按位非(NOT)(一元运算)
& 按位与(AND)
| 按位或(OR)
^ 按位异或(XOR)
>> 右移
>>> 右移,左边空出的位以0填充
<< 左移
&= 按位与赋值
|= 按位或赋值
= 按位异或赋值
>>= 右移赋值
>>>>= 右移赋值,左边空出的位以0填充
<<= 左移赋值
右移>>:正数右移左边补0,负数右移左边补1
0000 1111右移两位→0000 0011
1101 0011右移两位→1111 0100
runoob:Java StringBuffer 和 StringBuilder 类
class Solution {
public String toHex(int num) {
/*
十六进制里面的abcedf是char类型?
*/
//char temp;
if(num==0){
return "0";
}
char[] chars={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
StringBuilder sb = new StringBuilder();
//sb.length() < 8判断有没有全部转化完
//使用0xf(00...01111b)获取num的低4位。
//>>算数位移,其中正数右移左边补0,负数右移左边补1。
//& 运算含义:如果对应的两个bit都是1,则那个bit结果为1,否则为0
while(sb.length()<8 && num!=0){
sb.append(chars[num & 0xf]);//num & 0xf得到下标0-15数字
//>>>表示无符号右移
num>>>=4;//每4个二进制位是一位8进制
}
return sb.reverse().toString();//
// reverse() 将此字符序列用其反转形式取代。
//toString() 方法返回此对象本身(它已经是一个字符串)。
//Java Character类:toString() 方法用于返回一个表示指定 char 值的 String 对象。结果是长度为 1 的字符串,仅由指定的 char 组成。
}
}