请问一下关于两个同int型整数相乘的值的类型问题?

当两个int型整数相乘发生溢出时,其结果原来是不是一个正确的值(但4字节无法表示),然后被截断成int型所得的值?还是这两个数在运算时就已经出现溢出错误得到某一个值?是不是两个相同类型的数据相乘后的值默认也是同类型的?如果发生溢出,是不是可以在最后得到的“错误”结果前做一次强制类型转换到更宽位从而得到正确结果,还是需要把相同类型的两个数据都强制转换为更宽位从而得到正确结果?

想多了,直接溢出,不存在什么扩容

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/198944
  • 这篇博客也不错, 你可以看下面试必问_你在开发过程中有没有遇到什么棘手的问题,是怎么解决的、你在开发过程中有没有遇到什么问题
  • 除此之外, 这篇博客: 数据结构实验报告二 栈和队列中的 4、假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点(不设队头指针),试编写相应的置空队列、入队列、出队列的算法。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 实现代码:

    #include<bits/stdc++.h>
    #include<conio.h>
    #define TRUE 1
    #define FALSE 0
    #define QelemType int
    typedef struct Node
    {
        QelemType data;
        struct Node *next;
    } Node,*LinkQNode;
    typedef struct
    {
        LinkQNode rear;
    } LinkQueue;
    
    void InitLinkQueue(LinkQueue &Q)
    {
        Q.rear=(LinkQNode)malloc(sizeof(Node));
        Q.rear->next=Q.rear;
    }
    
    int IsLQEmpty(LinkQueue &Q)
    {
        if(Q.rear->next==Q.rear)
            return TRUE;
        else
            return FALSE;
    }
    
    int EnLinkQueue(LinkQueue &Q,QelemType x)
    {
        LinkQNode NewNode;
        NewNode=(LinkQNode)malloc(sizeof(LinkQNode));
        if(NewNode!=NULL)
        {
            NewNode->data=x;
            NewNode->next=Q.rear->next;
            Q.rear->next=NewNode;
            Q.rear=NewNode;
            return TRUE;
        }
        else
            return FALSE;
    }
    
    int DeLinkQueue(LinkQueue &Q,QelemType *x)
    {
        LinkQNode p;
        if(Q.rear->next==Q.rear)
            return FALSE;
        p=Q.rear->next->next;
        Q.rear->next->next=p->next;
        if(Q.rear==p)
            Q.rear=Q.rear->next;
        *x=p->data;
        free(p);
        return TRUE;
    }
    
    int main()
    {
        int t;
        char a;
        QelemType tt;
        LinkQueue Q;
        InitLinkQueue(Q);
        if(IsLQEmpty(Q))
            printf("该队列目前为空!\n");
        else
            printf("该队列不为空!\n");
        printf("输入入队列的元素个数:");
        scanf("%d",&t);
        for(int i=1; i<=t; i++)
        {
            QelemType ys;
            printf("\n输入第%d个入列元素:",i);
            scanf("%d",&ys);
            if(EnLinkQueue(Q,ys))
                printf("元素%d成功入列!\n",ys);
        }
        printf("\n输入字母‘e’开始出列\n");
        getchar();
        while(~scanf("%c",&a))
        {
            getchar();
            if(a!='e')
            {
                printf("\n输入字母'e'继续出列\n");
                continue;
            }
            if(DeLinkQueue(Q,&tt))
                printf("元素%d成功出列\n",tt);
            if(IsLQEmpty(Q))
            {printf("该队列目前为空!\n");break;}
            else
                printf("该队列不为空!\n");
            printf("\n输入字母'e'继续出列\n");
        }
        return 0;
    }
    
  • 您还可以看一下 王西猛老师的商超收银软件排队挂单取单编程思路教程课程中的 点餐软件开发过程中的挂单取单编程概述小节, 巩固相关知识点