原码直接转为补码

近期利用matlab保存数据到txt中,因为计算机保存数据是以补码形式进行的,所以需要将负数先转换为补码形式。其次利用vivado生成的数据通过matlab读取的时候,一定要注意也要数据转换。
原码转补码:网上大部分都是将原码变为反码,然后符号位不变数据位按位取反然后+1;但是我们一般情况下都是规定好保存的位数,例如保存8位二进制,这样子就不用麻烦了。
补码=模-|负数|
可能不是很好理解,比如说24小时,24就是模,负数就是-3,
模-|负数|=21; (这个跟按位取反+1结果是一样的)
模在计算机中是相对固定的,n位长度的寄存器数模就是2^n
在这里插入图片描述下面是我做过的一个例子:
在这里插入图片描述上图是需要将temp里面的东西保存到fp中,dec2bin函数是将十进制的数转换为长度为16位的二进制数(16是指定的位数)。但是如果遇到负数函数就报错,因此需要变为补码形式即(模-|负数|)也就是图上的s(i)+2^16;

负数=补码-模

比如一个八位数-1的模是256(10000 0000) ,所以-1的补码就是256-|-1| = 255 (1111 1111)、对半分的终点:256 - |-128| = 128,所以说正数最大值(127)过了就是负数最大值(-128)
在这里插入图片描述下面同样举一个例子,fft_real的数据位宽是27位
在这里插入图片描述
上图的工作是把补码转换为原码,但是为什么出现了226和227呢?对比上面那个256的例子就能发现
在这里插入图片描述当数值大于2^26的时候,就可以认定为负数需要利用公式转换。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值