在uint64_t和long的混合上使用算术会在arm(C ++编译器)上产生不需要的结果。相同的代码可以在x86上正常工作。
如果将long替换为uint64_t,则它将按预期工作。
Armv7编译器是C ++(Debian 6.3.0-18 + deb9u1)6.3.0 20170516
这里的代码也:http : //cpp.sh/2xrnu
int main()
{
uint64_t x = 1000UL * 60 * 60 * 24 * 31;
int i1 = 31;
long l2 = 1000 * 60 * 60 * 24;
uint64_t u2 = 1000 * 60 * 60 * 24;
std::cout << "x : " << x << std::endl;
std::cout << "i1 : " << i1 << std::endl;
std::cout << "l2 : " << l2 << std::endl;
std::cout …Run Code Online (Sandbox Code Playgroud)