我有一个项目,我处理不适合整数的大数字(ns-timestamps)。因此,我想使用例如 int64_t 并且目前正在编写一个测试用例(是的!)。
为了检查大量的行为,我从类似的东西开始
int64_t val = 2*std::numeric_limits<int>::max();
qDebug() << "long val" << val;
返回
long val -2
(就像我将 val 定义为 int 一样)。
但如果我写
int64_t val = std::numeric_limits<int>::max();
val *= 2;
qDebug() << "long val" << val;
我明白了
long val 4294967294
这看起来是正确的。
所以对我来说,它看起来好像2*max()
首先存储在一个整数中(在此步骤中被截断),然后复制到int64
. 为什么会这样?编译器知道结果是类型的int64
,因此它2*max()
应该直接适合。