专栏名称: 九章算法
专业的北美IT求职经验分享、技术交流社区,帮助你找到好的IT工作。由硅谷顶尖IT企业工程师维护。提供专业的算法培训/面试咨询,官网 www.jiuzhang.com
目录
相关文章推荐
九章算法  ·  下班后1小时 ,决定你娃未来5年 ·  5 天前  
化妆品观察 品观  ·  算法,正在“扼杀”美妆品牌 ·  4 天前  
化妆品观察 品观  ·  算法,正在“扼杀”美妆品牌 ·  4 天前  
程序员鱼皮  ·  被算法折磨,LeetCode 到底咋刷? ·  4 天前  
程序员鱼皮  ·  被算法折磨,LeetCode 到底咋刷? ·  4 天前  
九章算法  ·  放弃硬卷,发现了进大厂的另一条路径 ·  6 天前  
九章算法  ·  这是北美“亚男”生存的真相… ·  5 天前  
51好读  ›  专栏  ›  九章算法

Facebook 面试题 | 将数字转换为十六进制

九章算法  · 公众号  · 算法  · 2016-12-02 08:56

正文


将数字转换为十六进制


题目描述


给出一个整型(int)的数

将其转换为十六进制的表示方法

负数要用二进制补码的形式表示


样例输入


1
Example 1

Input:

26


Output:

"1a"

2
Example 2

Input:

-1


Output:

"ffffffff"


解题思路分析

❖首先,如果这个数是个正数的话,那么非常简单: 

只需要考虑十进制数到16进制数的转换,那么转换十六进制只需要用这个数对16^0,16^1,16^2……取余得到转换成16进制后的每一位(还有一点需要注意的是16进制下10~15我们用a~f表示)。


❖所以这题的关键就在于负数的情况。


1

负数的二进制补码表示


很多人都是知道:


负数在计算机内部的存储方式是补码的形式

负数的补码就等于其正数反码+1


举个例子,如果我们使用的是4位的二进制,那么2的表示形式就是0010,2的反码表示形式就是1101,所以-2的表示形式就是其反码+1,是1110,转换成16进制也是同样的道理。

所以我们这种思路的做法就是16进制表示形式,然后再对其进行取反,最后再+1得到我们的答案。



2
计算机内部存储形式转换


一个整型的数,在计算机内部是怎么存储的呢?


很明显是已二进制的形式存储的,那么不管我们输入的是正数还是负数,其实计算机内部已经有了完整的存储,那么其实不需要我们自己再去计算反码补码,我们只需要对其进行2进制转换成16进制就可以了。


因为二进制一位表示的是2,16进制一位表示的是16,那么也就是说16进制下一位表示的是2进制下的4位(16 = 2^4)。在转换的过程中我们就可以每四位转换成一位,这里有个小技巧:


用到位运算&和>>来提高运行速度,&15相当于%16


(这里同学们可以自己思考一下为什么这样是一定的。)


面试官角度分析

需要理解负数在计算机中的存储形式,以及掌握补码的转换方法。

❖了解计算机存储数的机制

❖不仅能转换正数,还要能够熟练转换负数16进制,此题才能够拿到hire


相关Lintcode面试题

http://www.lintcode.com/zh-cn/problem/single-number/

http://www.lintcode.com/zh-cn/problem/single-number-ii/

http://www.lintcode.com/zh-cn/problem/single-number-iii/


想进FLAG实习?九章帮你系统讲解面试算法,解决面试时常见算法问题


以下课程,正在报名中!

《九章算法班》

《算法强化班》

《Java入门与基础算法班》

《Big Data 项目实战班》

第一节免费试听!!

报名网址http://t.cn/RAC7Era, 或猛戳“阅读原文”

推荐文章
九章算法  ·  下班后1小时 ,决定你娃未来5年
5 天前
化妆品观察 品观  ·  算法,正在“扼杀”美妆品牌
4 天前
化妆品观察 品观  ·  算法,正在“扼杀”美妆品牌
4 天前
程序员鱼皮  ·  被算法折磨,LeetCode 到底咋刷?
4 天前
程序员鱼皮  ·  被算法折磨,LeetCode 到底咋刷?
4 天前
九章算法  ·  这是北美“亚男”生存的真相…
5 天前
中国经济网  ·  狼的爱情(一个真实的故事)丨可读
8 年前
透明家  ·  申花板块与未来科技城如何选?
7 年前
就叫熊太行也行  ·  减负减负,减成废物
6 年前