在我的应用程序中,我使用存储在long int
变量中的大数字。有时,我必须将它们相乘。所以我使用long long int
变量来存储结果。示例:
long long int multiplication(long int a, long int b)
{
long long int r = (long long int)a * (long long int)b;
return r;
}
为了管理断言的前提条件,我梦见sizeof(long long int) >= 2*sizeof(long int)
总是如此,但事实并非如此。似乎我唯一的保证是sizeof(long int) >= 4
和sizeof(long long int) >= 8
,但它们之间没有规则。
管理这种情况的最佳方法是什么?
答案 0 :(得分:2)
看起来问题不在于类型本身,
但是你必须处理的最大值。大多数64
位系统,long
和long long
都是64位,但是如果
您的代码也可以移植到32位系统,您可能需要
无论如何,将long
中的值限制为32位。在那里面
没有问题,即使在某些机器上,long
为64
位。真正的问题是你可以做出什么假设(以及什么
你可以确认)关于你的意见。
答案 1 :(得分:1)
您可以在cstdint
中使用类似int32_t,int64_t的内容