專欄 | 九章演算法
網址 | www.jiuzhang.com
題目描述
給出一個整型(int)的數
將其轉換為十六進位制的表示方法
負數要用二進位制補碼的形式表示
樣例輸入
Example 1
Input:
26
Output:
"1a"
Example 2
Input:
-1
Output:
"ffffffff"
解題分析
❖首先,如果這個數是個正數的話,那麼非常簡單:
只需要考慮十進位制數到16進位制數的轉換,那麼轉換十六進位制只需要用這個數對16^0,16^1,16^2……取餘得到轉換成16進位制後的每一位(還有一點需要注意的是16進位制下10~15我們用a~f表示)。
❖所以這題的關鍵就在於負數的情況。
負數的二進位制補碼錶示
很多人都是知道:
負數在計算機內部的儲存方式是補碼的形式
負數的補碼就等於其正數反碼+1
舉個例子,如果我們使用的是4位的二進位制,那麼2的表示形式就是0010,2的反碼錶示形式就是1101,所以-2的表示形式就是其反碼+1,是1110,轉換成16進位制也是同樣的道理。
所以我們這種思路的做法就是16進製表示形式,然後再對其進行取反,最後再+1得到我們的答案。
計算機內部儲存形式轉換
一個整型的數,在計算機內部是怎麼儲存的呢?
很明顯是已二進位制的形式儲存的,那麼不管我們輸入的是正數還是負數,其實計算機內部已經有了完整的儲存,那麼其實不需要我們自己再去計算反碼補碼,我們只需要對其進行2進位制轉換成16進位制就可以了。
因為二進位制一位表示的是2,16進位制一位表示的是16,那麼也就是說16進位制下一位表示的是2進位制下的4位(16 = 2^4)。在轉換的過程中我們就可以每四位轉換成一位,這裡有個小技巧:
用到位運算&和>>來提高執行速度,&15相當於%16
(這裡同學們可以自己思考一下為什麼這樣是一定的。)
面試官角度分析
❖需要理解負數在計算機中的儲存形式,以及掌握補碼的轉換方法。
❖瞭解計算機儲存數的機制
❖不僅能轉換正數,還要能夠熟練轉換負數16進位制,此題才能夠拿到hire
相關Lintcode面試題
www.lintcode.com/zh-cn/probl…
www.lintcode.com/zh-cn/probl…
www.lintcode.com/zh-cn/probl…
推薦閱讀:
- 網申時, 是否需要 cover letter (求職信) ?
- 2017年最受歡迎的程式語言有哪些?
- HR 揭祕: 10 個掛掉 Offer 的原因
- Google offer 如何談判?聽聽 Google recruiter 怎麼說!
- 面試遇到做過的題怎麼辦?
- 冷凍期大揭祕 | Google、FB、Amazon、Linkedin冷凍期
- 面試前如何瞭解一家IT企業?試試官方技術部落格!
- 北美IT企業intern薪資大曝光
- 16個behavior question 的面試官解析及tips
- Google晉升機制 | 大公司如何升級打怪, 獲得晉升?
歡迎關注我的微信公眾號:九章演算法(ninechapter)。
精英程式設計師交流社群,定期釋出面試題、面試技巧、求職資訊等