乘法溢出
unsigned int a;
unsigned int b
如何判断a * b溢出?
!!!!!!!!!
[解决办法]
a*b <= 65535
[解决办法]
我错了 sorry~
[解决办法]
比较b和(2^32-1)/ a的大小
不知有没有更简单的办法~
[解决办法]
a*b <= 4294967295
[解决办法]
#include<iostream>
using namespace std;
int main(void)
{
unsigned int a;
unsigned int b;
unsigned int c;
a= 65536;
b= 65536;
c=a*b;
if (c < 4294967295)
{
cout<<"c: "<<c<<endl;
}
else
{
cout<<"ccc: "<<c<<endl;
}
}
[解决办法]
unsigned longlong aaa = a*b;
if (aaa > 0xffffffff)
{
// 溢出
}
[解决办法]
你是想事先判断,还是事后判断?
unsigned int最大的数是2^32
[解决办法]
这是个不错的方法
[解决办法]
unsigned int a;
unsigned int b;
unsigned int temp = 0;
for(unsigned int i=0; i<b; i++)
{
if(0xffffffff - temp) > a
{
temp += a;
}
else
{
// 有溢出了
}
}
[解决办法]
事先判断就是在计算乘法之前就知道,那两个数相乘会溢出;事后判断就是两数相乘之后的结果,判断结果是否溢出。
[解决办法]
4楼的想法精简,不过貌似小有bug,下面这样才行:
temp = ((longlong)0xffffffff + b - 1)/b;
if(a>temp)
{
// 有溢出
}
[解决办法]
[解决办法]
比较b和(2^32-1)/ a的大小
这种方法实在