負數十六進製制快速計算方法
起因:找工作時筆試過程中經常遇到十進位制轉十六進製制的題目,
而且會時不時遇到負數轉十六進製制的題目,題目考察的是應聘
者對進製轉換的掌握程度。
傳統思路:1.先將十進位制轉二進位制再取反得反碼後加1得到補碼
2.將二進位制4位一組劃分轉成對應十六進製制
突發奇想轉換思路:假設我們要轉換的是32位平台下的int型別
(4位元組32位)的-13,那我們可以快速寫出-1的十六進製制為:
ffffffff(有符號型別的資料-1就是其型別範圍的最大值,8位
char型別的-1為ff,這個比較好記,都是f,4位乙個f,8位兩個f
依此類推),那麼32位-13 = -1 - 12,則-13的補碼就是-1的補
碼減去12,則32位的-13補碼十六進製制即為:
ffffffff - 12 = fffffff3
擴充套件:同樣我們可以擴充套件一下,例如c中我們可以將-1強轉為無
符號數除以2就可以得到有符號數正數的範圍的上限(雖然沒用,
但是可以提供一種巧用的思路)
十六進製制計算問題
system.out.println long.tohexstring 0x100000000l 0xcafebabe 先看看以上 感覺答案應該是 1cafebabe。但是答案卻是 cafebabe。為什麼呢,怎麼感覺像是int型變數的相加,第32位的1被捨棄了。看看以下 就明白了 int hex ...
Matlab 十進位制負數轉換十六進製制,簡單實用
需要對乙個數字矩陣進行乙個資料的歸一化,把十進位制數最終轉化成3個位元的十六進製制,也就是24位的數。直接用 函式 dec2hex 因為有負數和小數的存在,需要額外的處理,小數還比較好解決,根據設計,直接四捨五入取整就好,不需要保留小數。對於負數轉十六進製制,matlab沒有相關的函式可以直接轉換。...
十進位制數轉換為八進位制數 十六進製制數
十進位制轉換為其他進製有乙個基本公式 n n div d d n mod d 其中 div 是整除,mod 為求餘,n 是十進位制數,d 是要目標 進製 例如 1348 10 2504 8,運算過程如下 nn div 8 n mod 8 1348 1684 16821021 2520 2 餘數的逆序...