首页
社区
课程
招聘
[求助]VC中的乘法问题
发表于: 2008-9-3 18:05 5327

[求助]VC中的乘法问题

2008-9-3 18:05
5327
当两个非常大的数相乘会溢出。。。如果想得到结果该怎么办呢?

溢出提示  warning C4307: '*' : integral constant overflow

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
这个警告是你在乘法中用了两个常量并且相乘结果太大才有的吧,比如:

int a;
a = 5000000000000000000 * 5;


这样就会有C4307的警告,但是如果把一个常量换成变量就不会有了:

int a;
int b = 5;
a = 5000000000000000000 * b;


但是这样会有另一个C4244的警告:从“__int64”转换到“int”,可能丢失数据
所以应该再换成这样就好了:

__int64 a;
int b = 5;
a = 5000000000000000000 * b;
2008-9-3 18:19
0
雪    币: 11705
活跃值: (970)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
3
用 __int64 或者 float /double.
2008-9-3 18:20
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
再轻轻的问下 StarsunYzL 大大 怎么样才可以把 11518251* 20251 的结果用printf 打印出来呢?
2008-9-3 18:29
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
又看到 readyu  大大了。。。高兴ing...
2008-9-3 18:29
0
雪    币: 177
活跃值: (141)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=;]...[/QUOTE]
这种情况我下一般用DWORD ,测试没有问题
2008-9-3 18:36
0
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
想没有C4307的警告的话,貌似只能这样:

__int64 b = 20251;
printf("%I64d", 11518251 * b);


或者这样:

printf("%I64d", 11518251 * 20251i64);
2008-9-3 18:38
0
雪    币: 454
活跃值: (1673)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
DWORD测试没问题估计是因为他的数不够大,用DWORD再试试5000000000000000000 * 5,肯定不行
2008-9-3 18:44
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
  3KU  StarsunYzL 测试通过呼呼~~高兴

float 也可以哦
2008-9-3 18:46
0
雪    币: 11705
活跃值: (970)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
10
to wqrsksk:
每个人都有他/她熟悉和不熟悉的领域。 多实践就好了。

看了你在这里问的一些帖子都是基础的问题,google/baidu搜索可能找到答案更快一些。

p.s. 不要叫"大大"。容易产生距离。没有谁比谁大。直呼id就行。

^_*
2008-9-3 19:06
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
readyu   大哥  偶是google + baidu 搜索了“integral constant overflow” 这个家伙 没有几个显眼的答案才来的哦。
2008-9-3 19:36
0
游客
登录 | 注册 方可回帖
返回
//