在matlab中有這麼兩個函式
hex2num(str),將16進位制字串str(預設雙精度)轉換成一個數(如果加一個型別轉換可以轉換為單精度hex2num(single(str))
num2hex(num),將一個雙精度的數num(預設)裝換成16進位制字串(當然也可以強制轉換num2hex(single(num)) )
注意,上面所提到的16進位制數,並非其邏輯上的16進位制,而是其機器上的2進位制數對應的16進位制
比如
一個10進位制(邏輯上)數3.5 對應的16進位制(邏輯上)數為3.8
matlab裡面的dec2hex() 和 hex2dec都是邏輯上的轉換 // 當然如果你這樣輸入 dec2hex(3.5) 會出錯,因為這個函式只是針對整數
一個單精度精度數和一個雙精度數在matlab裡面是這樣儲存的
先將浮點數3.5轉換成其邏輯上的2進位制,比如3.5對應的2進製為11.1,然後寫成科學計數1.11*2^1
容易知道,寫成科學計數法之後第一位一定是1,所以這一位不用管,只記錄其尾數(1.11)11,
其指數是1,符號是正號(0)
單精度的格式
X /XXXX XXXX / XXXX XXXX XXXX XXXX XXXX XXX
第一部分為符號為,即正為0,負數為1
第二部分為指數為,表示-127~128,而其範圍為0~255,所以實際儲存是實際指數+127,即1+127=128 1000 0000
第三部分是尾數,即11
所以3.5在計算機中就是表示為0100 0000 1100 0000 0000 0000 0000 0000,數一數應該是32位,單精度就是32位
所以其對應的16進位制就是
40600000
在matlab中有這麼兩個函式
hex2num(str),將16進位制字串str(預設雙精度)轉換成一個數(如果加一個型別轉換可以轉換為單精度hex2num(single(str))
num2hex(num),將一個雙精度的數num(預設)裝換成16進位制字串(當然也可以強制轉換num2hex(single(num)) )
注意,上面所提到的16進位制數,並非其邏輯上的16進位制,而是其機器上的2進位制數對應的16進位制
比如
一個10進位制(邏輯上)數3.5 對應的16進位制(邏輯上)數為3.8
matlab裡面的dec2hex() 和 hex2dec都是邏輯上的轉換 // 當然如果你這樣輸入 dec2hex(3.5) 會出錯,因為這個函式只是針對整數
一個單精度精度數和一個雙精度數在matlab裡面是這樣儲存的
先將浮點數3.5轉換成其邏輯上的2進位制,比如3.5對應的2進製為11.1,然後寫成科學計數1.11*2^1
容易知道,寫成科學計數法之後第一位一定是1,所以這一位不用管,只記錄其尾數(1.11)11,
其指數是1,符號是正號(0)
單精度的格式
X /XXXX XXXX / XXXX XXXX XXXX XXXX XXXX XXX
第一部分為符號為,即正為0,負數為1
第二部分為指數為,表示-127~128,而其範圍為0~255,所以實際儲存是實際指數+127,即1+127=128 1000 0000
第三部分是尾數,即11
所以3.5在計算機中就是表示為0100 0000 1100 0000 0000 0000 0000 0000,數一數應該是32位,單精度就是32位
所以其對應的16進位制就是
40600000