2---MATLAB將十進位制轉換成二進位制補碼
阿新 • • 發佈:2019-02-11
MATLAB中提供了一個將十進位制轉換為二進位制的函式dec2bin,但是該函式只接收非負整數,也就是不能直接將負數轉換為二進位制補碼。那如何在MATLAB中生成補碼呢?我們都知道負數的補碼為其反碼加1,然而MATLAB中的二進位制是字串,是不能直接運算的,因為要對字串進行操作,所以如果用這種方式生成補碼的話會比較困難。當然,我們也可以先用bin2dec函式將反碼轉換為十進位制加1,然後再轉換為2進位制,以降低處理複雜度,但事實上我們還有更好的辦法。
觀察一下下面的表格。
位寬N | 二進位制補碼 | signed | unsigned | 模 |
---|---|---|---|---|
3 | 110 | -2 | 6 | 8 |
3 | 101 | -3 | 5 | 8 |
4 | 1100 | -4 | 12 | 16 |
4 | 1011 | -5 | 11 | 16 |
8 | 1000 1000 | -120 | 136 | 256 |
8 | 1000 0001 | -127 | 129 | 256 |
_
從上表不難發現一個規律,
x = 010
y = 101
z = y + 1 = 110
a = x + y = 111
b = a + 1 = 1000 =2 3
可以看到取反的數y加上x是等於111的,那取反之後再加1再加上x就一定會等於1000,對於其他的負數也都一樣。
下圖是wiki百科裡的描述,如果圖看不清可以點選上面的連結。
重要的就是這個公式
x∗=2N−x
對於位寬為
if (x >= 0)
bin_x = dec2bin(x, N); % 正數的反碼和補碼都和原碼一樣
else
bin_x = dec2bin(2^N + x, N);
end
如果是要對二進位制進行模擬的話,在某些情況下用HDL模擬,然後用MATLAB分析結果可能會更快。