我刚刚开始编程,我编写了以下代码,但由于某种原因,即使我几乎确定我的方式过度使用了值类型,它也没有显示正确的值。
#include <limits>
#include <iostream>
int main() {
unsigned long long int imin = std::numeric_limits<unsigned long long int>::min(); // minimum value
unsigned long long int imax = std::numeric_limits<unsigned long long int>::max(); // maximum value
std::cout << imin << " " << imax << std::endl;
unsigned long long int a;
a = 45*44*43*42*41*40;
std::cout << "die wahrscheinlichkeit ist: 1:" << a << std::endl;
return 0;
}
当我编译它时,我得到了这个:
0 18446744073709551615
die wahrscheinlichkeit ist:1:1569475904处理完成,退出代码为0
和这个警告:
Warnung:Ausdruck的Ganzzahlüberlauf[-Woverflow]
a = 45 * 44 * 43 * 42 * 41 * 40;
翻译,这意味着表达式中的整数溢出(或类似的东西)。
当我使用普通计算器时,我得到5864443200。
我正在使用C ++ 14。
答案 0 :(得分:0)
问题确实是你的正常int数字有溢出。除了计算之外,您的声明都很好。数字40,41,42,43,44和45是具有各自长度的正常整数。它们乘以正常整数,当数字变大时,溢出发生。计算完成后(溢出已经发生),数字将转换为unsigned long long int。
因此,使用LLU后缀制作 long long unsigned 类型的数字:
$dueDate = '2017-06-26 09:11:28';
$due = DateTime::createFromFormat('Y-m-d H:i:s', $dueDate);
$today = new DateTime();
$diff = $today->diff($due);
echo $diff->format('%hh %im');
这将解决您的问题。