打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

  

  将数字转换为十六进制

  题目描述

  给出一个整型(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面试题

  lintcode/zh-cn/problem/single-number/

  lintcode/zh-cn/problem/single-number-ii/

  lintcode/zh-cn/problem/single-number-iii/

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
程序中数值的表示方法
进制转换和变量解释
原码、反码、补码、移码
数制和码制
计算机原理 第一章 习题
单片机基础知识与应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服