需要對乙個數字矩陣進行乙個資料的歸一化,把十進位制數最終轉化成3個位元的十六進製制,也就是24位的數。
直接用 函式
dec2hex
()
因為有負數和小數的存在,需要額外的處理,小數還比較好解決,根據設計,直接四捨五入取整就好,不需要保留小數。對於負數轉十六進製制,matlab沒有相關的函式可以直接轉換。
乙個是在計算機中表達,乙個是科學計數方式表達。
714 原碼: 0000 0010 1100 1010 02ca
-714的原碼: 1000 0010 1100 1010
負數的反碼:1111 1101 0011 0101(符號位不變)
負數的補碼:1111 1101 0011 0110 fd36
-714計算機儲存式: 1111 1101 0011 0110
下面為:由正數原碼求負數的計算機儲存式。
-714
714 化成16進製制 02ca,二進位制
0000 0010 1100 1010
取反(不是反碼,正數的反碼是本身)
1111 1101 0011 0101
加11111 1101 0011 0110
fd36
負數轉16進製制,其正數取反碼+1,即可。
如果按照上面的思路,就需要先取反碼,然後+1,才能得到乙個負數的十六進製制。
%
ifcoeff2row
(fix
(jj/3)
+1)<
0% temp =
abs(
coeff2row
(fix
(jj/3)
+1))
;% tempbin =
dec2bin
(temp,24)
;% a =
tempbin(3
);%for x =1:
24%iftempbin
(x)==
'0'%
tempbin
(x)=
'1';
%else
%tempbin
(x)=
'0';
% end
% end
%%然後對tempbin+1%
....
...% tempdec =
bin2dec
(tempbin)
;% end
想法很美好,取反得乙個乙個的取…
+1還得一位一位的判斷,上面的**我沒有寫完,發現實在是太麻煩了。
這是網上找到的分享,其實道理很簡單,就是負數和正數相加得0,對於十六進製制也是如此。
我的資料需要是3位元24位的數值,所以範圍是 0~0xffffff,轉換成十進位制也就是0 ~16777215,即一共16777216個數。
比如這兩個數
14680064可以很輕鬆的發現和-2097152
14680064 + 2097152 = 16777216
16777216對應的16進製制0x1000000,因為我們是三個位元組,所以最高位溢位,也就是0。
如果我是要求 -2097152的十六進製制,那麼直接使用
coeff2row
(find
(coeff2row<0)
)=coeff2row
(find
(coeff2row<0)
)+16777216
;
這樣就可以得到乙個正的十進位制數,這個十進位制數直接進行dec2hex就可以了轉換成原數值(負數)對應的十六進製制。 MATLAB 整數小數負數十進位制轉換為十六進製制
matlab 整數小數負數十進位制轉換為十六進製制 function output transfor input,precision tans d to h absinput abs input intquot fix absinput decimal absinput intquot decquo...
十進位制的轉換
include int main void int convertednumber 64 long int numbertoconvert int nextdigit,base,index 0 get the number and the base printf number to be conve...
matlab中將十六進製制轉換為十進位制方法
matlab中將十六進製制轉換為十進位制方法 a textread c a.txt s 以字元形式開啟檔案 alpha hex2dec a 16進製制轉化為10進製數,存入alpha矩陣 16進製制轉10進製 轉化方法二 wenjian ming,lujing ming uigetfile c a....