MATLAB中提供了一个将十进制转换为二进制的函数dec2bin,但是该函数只接收非负整数,也就是不能直接将负数转换为二进制补码。那如何在MATLAB中生成补码呢?我们都知道负数的补码为其反码加1,然而MATLAB中的二进制是字符串,是不能直接运算的,因为要对字符串进行操作,所以如果用这种方式生成补码的话会比较困难。当然,我们也可以先用bin2dec函数将反码转换为十进制加1,然后再转换为2进制,以降低处理复杂度,但事实上我们还有更好的办法。

首先得了解补码的原理,这里有3个链接。
补码-wiki百科
补码-百度百科
计算机为什么选用二进制补码

观察一下下面的表格。

位宽N 二进制补码 signed unsigned 模 2N 2^N
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

_
从上表不难发现一个规律, abs(signed)+unsigned=2N abs(signed) + unsigned = 2^N,注意这个规律只针对负数。推导过程也很简单,如一个位宽为3的负数的绝对值为2,2的二进制表示为010,那求它的二进制补码就是对010取反加1。

x = 010
y = 101
z = y + 1 = 110
a = x + y = 111
b = a + 1 = 1000 = 23 2^3

可以看到取反的数y加上x是等于111的,那取反之后再加1再加上x就一定会等于1000,对于其他的负数也都一样。

下图是wiki百科里的描述,如果图看不清可以点击上面的链接。

重要的就是这个公式

x∗=2N−x x^* = 2^N - x

对于位宽为 N N的正数xx,我们要求 −x -x的补码就是求正数 x∗ x^*的原码,所以我们得到在MATLAB里求一个位宽为N的整数 x <script type="math/tex" id="MathJax-Element-9">x</script>的补码表示的代码如下:

if (x >= 0)bin_x = dec2bin(x, N);        % 正数的反码和补码都和原码一样
elsebin_x = dec2bin(2^N + x, N);
end

如果是要对二进制进行仿真的话,在某些情况下用HDL仿真,然后用MATLAB分析结果可能会更快。

2---MATLAB将十进制转换成二进制补码相关推荐

  1. 【JavaScript实现十进制转换成二进制】

    [JavaScript实现十进制转换成二进制] 什么是二进制 二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借 ...

  2. C语言十进制转换成二进制源码

    把开发过程比较重要的一些内容备份一次,下边资料是关于C语言十进制转换成二进制的内容,应该对各位朋友有一些用. #include int main() { int num; std::cout < ...

  3. 十进制转换成二进制 (栈)

    十进制转换成二进制 (栈) 首先,转化的思路是 辗转取余法.比如说n = 5,先取模(5%2)获得1,然后取余并将其赋值给本身,得到n = 2:再取模得到0,取余之后n = 1:对1取模(1%2)得到 ...

  4. 十进制转换成二进制——C语言

    利用数组和调用函数编写一个十进制转换成二进制的程序 #include "stdio.h" int main(){int i = 0, n , a[32];printf(" ...

  5. C语言 十进制转换成二进制

    /*十进制转换成二进制*/#include<stdio.h>int main(int argc,char argv[]){int num,i;scanf("%d",&a ...

  6. C语言十进制转换成二进制、八进制、十六进制

    一.绪论 十六进制(Hexadecimal):在数学中是一种逢16进1的进位制.一般用数字0到9和字母A到F(或a~f)表示,其中:A~F表示10~15. 十进制(Decimal System):每相 ...

  7. 算法设计-利用栈把十进制转换成二进制

    十进制转换成二进制 void conversion(){ InitStack(S); scanf("%d",n); while(N){ Push(S,n%2) n=n/2; } w ...

  8. 十进制转换成二进制和十六进制的方法

    十进制转换成二进制和十六进制的方法 十进制数转换成二进制数-般分为两个步骤,即整数部分的转换和小数部分的转换. (1 )整数部分的转换 *除2取余法:*这种方法是由于D10=N2 =dn-1x2n-1 ...

  9. c语言十进制转换成二进制八进制十六进制,十进制数转换成二进制,八进制,十六进制(c语言)...

    利用一个函数实现十进制数转换成二进制,八进制,十六进制.利用的是栈的后进先出的思想.算法简单. #include #include #include #define STACK_INIT_SIZE 1 ...

最新文章

  1. SPOJ ATOMS - Atoms in the Lab
  2. 比Python 3.8快20%,Pyston v2正式发布
  3. 3个写进简历的京东AINLP项目实战
  4. Mysql 数据库锁表的原因和解决方法
  5. 009_Vue循环结构
  6. [crypto]-51.1-python的aes加解密/rsa生成密钥对/rsa加解密/hmac加密
  7. LINUX find、ln 常用命令总结
  8. Trie(字典)树详解
  9. SignalR 服务器系统配置要求
  10. c语言输入年月的流程图_C语言程序流程图
  11. ipad air1 12.5.5 checkra1n 越狱+绕过ID
  12. cache数据库入门教程 数据库m语言常用函数和命令
  13. HTML|内联CSS-背景和字体
  14. kernel function
  15. Android DeviceOwner 应用的能力
  16. 【防火墙_策略路由】
  17. BZOJ4340 : BJOI2015 隐身术
  18. 【Zeekr_Tech】为自动驾驶保驾护航—谈谈主流中间件设计
  19. 【安全头条】美国政府起诉 Kochava 出售敏感的地理位置数据
  20. 2022年哈尔滨工业大学计算机考研复试分数线多少

热门文章

  1. LC振荡电路以及考虑寄生参数时MOS管开通关断分析
  2. 股市的通俗经济学原理
  3. 6位你必须知道的产品大神
  4. 线性回归 原理及公式推导
  5. Java实现-五子棋
  6. word2vec的参数选择及原理简介
  7. php网站风格一键仿制,PHP镜像网站程序的实现原理,快速一键克隆其它网站
  8. 写一个strncpy(char *dest, const char *src, size_t cpy_lent) 的函数
  9. webERP的网络资源
  10. 高精地图众包生产模式