有時候我們需要將十進制數字轉換成二進制補碼形式,可以利用Matlab實現。
實現原理
Matlab自帶的函數dec2bin(d, n)
可以實現將十進制非負整數轉換成二進制數,其中,d
爲十進制數,n
爲最小
的二進制位數,輸出值爲char
型數組。
8位二進制補碼的對應關係如下表所示。由於正數的補碼等於原碼,因此直接用dec2bin
即可轉換。N
位負數轉換成補碼,可以將其增加2^N
,作爲正數轉換成二進制數。
Matlab代碼
將下面的代碼保存爲complement.m
,調用此函數即可轉換十進制數爲二進制補碼。
注意:對於同一個十進制負數,不同位數下的二進制補碼是不同的。這段代碼會根據給定的最小位數N
和x
的取值範圍,自動計算需要的位數,並通過返回值n
輸出。
% 用於計算補碼
% 參數x:原始十進制數組,正負數皆可
% 參數N:輸出的二進制補碼最小位數,如果位數不夠會根據x的取值範圍自動擴展
% 輸出值c:轉換得到的二進制補碼字符串數組
% 輸出值n:實際輸出的二進制補碼位數
function [c,n] = complement(x, N)
n = 0;
if(nargin == 2)
n = max(n, N);
end
a = max(x);
if(a > 0) % max(x) = 127,則n = 8; max(x) = 128,則n = 9
n = max(n, ceil(log2(a+1)) + 1);
end
a = min(x);
if(a < 0) % min(x) = -128,則n = 8; min(x) = -129,則n = 9
n = max(n, ceil(log2(-a)) + 1);
end
for i = 1 : length(x)
if x(i) < 0
x(i) = x(i) + 2^n;
end
end
c = DEC2BIN(x, n);
end
本文由jzj1993原創,轉載請註明來源:http://www.paincker.com/matlab-dec2bin