请教不同类型整数计算

[复制链接]
1151|4
 楼主| xvezhe 发表于 2014-2-17 09:03 | 显示全部楼层 |阅读模式
   unsigned  int dat;
  unsigned char num1,num2,num3;

请教,下面运算写法是否成立:  
  dat=1000*num1+100*num2+10*num3+1;


  
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,这已经溢出了,这个公式很容易溢出
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

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