Matlab 十進位制負數轉換十六進製制,簡單實用

2021-10-11 16:59:28 字數 1974 閱讀 8076

需要對乙個數字矩陣進行乙個資料的歸一化,把十進位制數最終轉化成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....