打印

关于2个16位有符号数相乘的问题

[复制链接]
1904|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
luxiaojianlumin|  楼主 | 2014-5-23 19:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 luxiaojianlumin 于 2014-5-23 19:34 编辑

写了一个16位乘法计算的程序:如下
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
long a;
int b;
void main()
{
        b=1000;
        while(1)
        {
                a=b*1125;
        }
}
运算结果应该是1125000,用计算器转换后对应的16进制是112A88。
实际结果是10888,对应的16进制0X00002A88,最前面的两位11丢了,不知道是怎么回事?

相关帖子

沙发
Jinss| | 2014-5-23 20:58 | 只看该作者
可能是溢出了。a换成float或者double试试。

使用特权

评论回复
板凳
dirtwillfly| | 2014-5-23 21:09 | 只看该作者
楼主参考下这个帖子吧:https://bbs.21ic.com/icview-306607-1-1.html

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
luxiaojianlumin + 2 很给力!
地板
luxiaojianlumin|  楼主 | 2014-5-24 19:27 | 只看该作者
回复2楼:
将变量定义成float型和double型的结果还是一样不对。
谢谢了。

使用特权

评论回复
5
luxiaojianlumin|  楼主 | 2014-5-24 19:29 | 只看该作者
怎么找不到结贴的功能了?

使用特权

评论回复
6
dirtwillfly| | 2014-5-24 22:07 | 只看该作者
现在可以结贴了

使用特权

评论回复
7
dragon_hn| | 2014-5-28 16:54 | 只看该作者
a=(long)b*1125;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

34

帖子

0

粉丝