打印

请教不同类型整数计算

[复制链接]
934|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xvezhe|  楼主 | 2014-2-17 09:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2014-2-17 09:18 | 只看该作者
成立是没有问题,但结果还是可能溢出

使用特权

评论回复
板凳
xvezhe|  楼主 | 2014-2-17 09:22 | 只看该作者
ayb_ice 发表于 2014-2-17 09:18
成立是没有问题,但结果还是可能溢出

如何更正的呢?   dat=unsigned int(1000*num1+100*num2+10*num3+1);这样更改是否正确的呢

使用特权

评论回复
地板
kz_zank| | 2014-2-17 11:16 | 只看该作者
本帖最后由 kz_zank 于 2014-2-17 11:17 编辑

uint为2个字节 0-65535的范围,uchar为1个字节0-255的范围,如楼主所说num1为uchar 假如说等于255,1000*255=255000,这已经溢出了,这个公式很容易溢出

使用特权

评论回复
5
ayb_ice| | 2014-2-17 11:44 | 只看该作者
结果已经超过了unsigned int的表示范围,必须用32位表示(假设unsigned int是双字节的)

修改如下
unsigned long dat;
dat=1000ul*num1+100*num2+10*num3+1;

使用特权

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

本版积分规则

54

主题

225

帖子

2

粉丝