微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用有符号乘法器进行无符号乘法

如何解决使用有符号乘法器进行无符号乘法

我被分配了一个使用有符号乘法器执行无符号乘法的任务。尽管进行了多次尝试,但我还是听不到。可以这样做吗?

代码

#include <stdio.h>
int main()
{
    // Must be short int
    short int a=0x7fff;
    short int b=0xc000;
    unsigned int res1;
    signed int res2;
    
    //unsigned multiplier
    res1= (unsigned short int) a * (unsigned short int) b;
    
    //signed multiplier
    res2= (short int) a * (short int) b;

    printf("res1: 0x%x %d \n res2: 0x%x %d\n",res1,res2,res2);
    return 0;
}

这是提供的代码

当前输出

res1: 0x5fff4000 1610563584 
res2: 0xe0004000 -536854528

预期输出

res1: 0x5fff4000 1610563584 
res2: 0x5fff4000 1610563584 

工作代码

#include<stdio.h>
#include<conio.h>
int main()
{
    short int a = 0x7fff;
    short int b = 0x3000;
    unsigned int unsignedRes;
    signed int signedRes;
    unsigned int ourRes;
    // Unsigned Multiplier
    unsignedRes = (unsigned short int) a * (unsigned short int) b;
    // Signed Multiplier
    signedRes = (short int) a * (short int) b;

    // Our Code using SIgned Multiplier
    ourRes = ((short int)a & ~(0xffffu << 16))*((short int)b & ~(0xffffu << 16));

    printf("Expected: 0x%x\nSigned: 0x%x\nResult: 0x%x",unsignedRes,signedRes,ourRes);
    getch();
    return 0;
}

解决方法

分配short int b=0xc000;本身已经实现了定义(视频:ISO / IEC 9899:2018 6.3.1.3 p。3),需要分两部分b = b1 * 2^15 + b0 = 0x1*2^15 + 0x4000(假设{{ 1}})。如果您在这两个部分中都这样做,并且以一种使结果为无符号数据类型的方式理解赋值,请对结果使用SHRT_MAX + 1 == 32768a*b == (a1 * 2^15 + a0) * (b1 * 2^15 + b0)临时变量来进行unsigned int ret2其余的。

假设输入受限于signed int的功能(由于unsigned short intunsigned的功能),并且所有类型都必须是带符号的类型,输出除外:>

0xc000

为了保持礼貌,作业的定义还不够明确,但是由于我不知道这是您的错,老师的错还是变焦连接不良,我试图为您提供一些指导。如果不是那么麻烦,那么您现在至少应该能够提出正确的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?