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

[复制链接]
 楼主| 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型的结果还是一样不对。
谢谢了。
 楼主| luxiaojianlumin 发表于 2014-5-24 19:29 | 显示全部楼层
怎么找不到结贴的功能了?
dirtwillfly 发表于 2014-5-24 22:07 | 显示全部楼层
现在可以结贴了
dragon_hn 发表于 2014-5-28 16:54 | 显示全部楼层
a=(long)b*1125;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部