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

您所在的位置:网站首页 蜥蜴和斯波克是什么意思 LeetCode 405.数字转换为十六进制数【Java】

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

2023-02-25 02:02| 来源: 网络整理| 查看: 265

文章目录 一、题目二、解题思路三、Java代码四、知识点补充1. 机器数2. 真值3. 原码4. 反码5. 补码6. 算术右移与逻辑右移

一、题目

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

注意:

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

示例一: 示例二:

二、解题思路

先考虑特殊情况:给定整数为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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3