Matlab十進制整數轉換成二級制補碼

有時候我們需要將十進制數字轉換成二進制補碼形式,可以利用Matlab實現。

實現原理

Matlab自帶的函數dec2bin(d, n)可以實現將十進制非負整數轉換成二進制數,其中,d爲十進制數,n爲最小 的二進制位數,輸出值爲char型數組。

8位二進制補碼的對應關係如下表所示。由於正數的補碼等於原碼,因此直接用dec2bin即可轉換。N位負數轉換成補碼,可以將其增加2^N,作爲正數轉換成二進制數。



Matlab代碼

將下面的代碼保存爲complement.m,調用此函數即可轉換十進制數爲二進制補碼。

注意:對於同一個十進制負數,不同位數下的二進制補碼是不同的。這段代碼會根據給定的最小位數Nx的取值範圍,自動計算需要的位數,並通過返回值n輸出。

  1. % 用於計算補碼
  2. % 參數x:原始十進制數組,正負數皆可
  3. % 參數N:輸出的二進制補碼最小位數,如果位數不夠會根據x的取值範圍自動擴展
  4. % 輸出值c:轉換得到的二進制補碼字符串數組
  5. % 輸出值n:實際輸出的二進制補碼位數
  6. function [c,n] = complement(x, N)
  7. n = 0;
  8. if(nargin == 2)
  9. n = max(n, N);
  10. end
  11. a = max(x);
  12. if(a > 0) % max(x) = 127,則n = 8; max(x) = 128,則n = 9
  13. n = max(n, ceil(log2(a+1)) + 1);
  14. end
  15. a = min(x);
  16. if(a < 0) % min(x) = -128,則n = 8; min(x) = -129,則n = 9
  17. n = max(n, ceil(log2(-a)) + 1);
  18. end
  19. for i = 1 : length(x)
  20. if x(i) < 0
  21. x(i) = x(i) + 2^n;
  22. end
  23. end
  24. c = DEC2BIN(x, n);
  25. end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章