LeetCode 405.数字转换为十六进制数【Java】

一、题目

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

注意:

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

示例一:
在这里插入图片描述
示例二:
在这里插入图片描述

二、解题思路

先考虑特殊情况:给定整数为0,则对应十六进制仍为0。然后根据进制转化再写。
(参考了b站up主SoulBite花云田的讲解)

三、Java代码

class Solution {
    public String toHex(int num) {
    	//将十六进制的0-f放入字典中
        char[] a={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
        if(num==0)
        return "0";
        StringBuilder s=new StringBuilder();
        while(num!=0){
        	/*
        	与运算是在取二进制数每四位保留对应的十六进制表中对应的那个数
        	(二进制数每四位表示一位十六进制数)
			*/
            s.append(a[num & 0b1111]);   //0b代表二进制,0b1111相当于15
            num >>>=4;                   //向16进制转换

        }
        return s.reverse().toString();   //所得余数逆序输出再的结果
    }
}

在这里插入图片描述

四、知识点补充

1. 机器数

一个数在计算机中的二进制表现形式,叫做这个数的机器数。机器数是带符号的。最高位存放符号,正数为0,负数为-1。
eg.
十进制+3对应二进制:00000011;-3对应二进制:10000011。转化后的二进制数就是机器数。

2. 真值

带符号位的机器数对应的真正数值称为机器数的真值。
eg.
10000011转化为十进制为131,但其真值不是131。
00000001真值为+1,10000001真值为-1。

3. 原码

原码是计算机机器数中最简单的一种形式,数值位就是真值的绝对值,符号位为“0”时表示正数,符号位为“1”时表示负数,原码又称带符号的绝对值。

eg.
+1 原码 00000001;-1 原码 10000001

4. 反码

反码通常是用来由原码求补码或者由补码求原码的过渡码。

正数的反码是其本身
负数的反码是在其原码基础上,符号位不变,其余各各位取反
eg,
+1 原码 00000001 反码 00000001
-1 原码 10000001 反码 11111110

5. 补码

补码是计算机把减法运算转化为加法运算的关键编码。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1
eg.
+1 原码 00000001 反码 00000001 补码 00000001
-1 原码 10000001 反码 11111110 补码 11111111

6. 算术右移与逻辑右移

算术右移:

算术右移(ASR)是将各位依次右移指定位数,然后在左侧用原符号位补齐。
进行有符号数据的除法。把一个数右移n位,相当于该数除以2的n次方

逻辑右移:

逻辑右移(LSR)是将各位依次右移指定位数,然后在左侧补0(不考虑符号位)

eg.
二进制数 11001101分别右移一位:
逻辑右移为 01100110 ;
算术右移为 11100110


来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值