有符号二进制乘法及MATLAB有符号数16进制到2进制的转换问题

您所在的位置:网站首页 matlab进行符号运算 有符号二进制乘法及MATLAB有符号数16进制到2进制的转换问题

有符号二进制乘法及MATLAB有符号数16进制到2进制的转换问题

2023-08-10 04:03| 来源: 网络整理| 查看: 265

目录 有符号数乘法MATLAB有符号16进制转2进制

有符号数乘法

在服务器中搭建乘法器验证波形时,多比特二进制数手算比较麻烦,所以导入matlab计算正确的输出结果。

此时要注意乘法器的特性,举个例子吧 5 × 5 = 25 也就是4‘b0101(+5) * 4’b0101(+5) = 0011001(+25)

那 -5 × 5 = -25该怎么做呢,应该把符号位单独拿出来异或,然后余数进行乘操作,也就是:4‘b1101(-5) * 4’b0101(5) = 1011001(-25)

然而,在电脑的二进制中,可以看到-5是1011,是用补码形式表述的,因此要对它进行补码的格式转换,才能进行乘法运算。 在这里插入图片描述

MATLAB有符号16进制转2进制

先把16进制数读入excel里

weight_hex = textread('E:\matlab\weight.txt','%s'); //以字符串形式读入

读完的数据是cell类型的16进制 在这里插入图片描述 由于matlab中没有直接的16进制转2进制的函数,需要先通过hex2dec函数转成10进制。

weight_dec = hex2dec(weight_hex);

此时为double类型的10进制 在这里插入图片描述 由于上面解释过的原因,这里的负数要先进行取补码的操作,才能得到正确的二进制乘法结果。 还是举例-5,16进制的-5表述为111…1011(十进制为65531),然而实际希望的-5是1000…0101(十进制的5+32768). 以下代码对十进制的数据进行符号位判定,进行取反+1

if (weight_dec>32767) %%意味着符号位为1,此为负数 weight_dec = 65536 - weight_dec + 32768; %对负数符号位以外的数取反+1 end

接下来,通过logical(bitget())的命令就可以得到2进制,拿第二个weight(负数)举例。 这是未经过负数取补码的结果 在这里插入图片描述 对test进行条件判定和取补,得到的二进制如下,确实是对原来的负数数据符号位以外的符号取反+1,验证完毕。 在这里插入图片描述 接下来可以放入二进制乘法器中相乘了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3