这里发生溢出了吗?
Is overflow happening here?
我不明白为什么这个程序会给出这个输出。这里是否发生溢出?
int _tmain(int argc, _TCHAR* argv[])
{
__int64 fileAgeInFileTime ;
fileAgeInFileTime = 24 *60 * 60 ;
cout << fileAgeInFileTime << endl;
fileAgeInFileTime *= 10000000;
__int64 fileAgeInFileTime2 = 24 *60 * 60 * 10000000 ;
cout << fileAgeInFileTime << " " <<fileAgeInFileTime2;
return 0;
}
O/P :
86400
864000000000 711573504
我不明白为什么 fileAgeInFileTime 和 fileAgeInFileTime2 有不同的值?
真正的要求是获取文件的 100 纳秒分辨率。
是的,你这里溢出了。当你用int
乘以int
时,结果也是int,所以你在计算24 * 60 * 60 * 1000000
时溢出了。在此之后,不正确的结果存储在 __int64
变量中。
Here 解释了算术运算符的类型转换
是的,有溢出。您将四个 int
常量相乘并将它们分配给 __int64
.
__int64
可以保存在 long long
中(自 C++11 起,long long
应该至少有 64 位)。您需要像这样将常量标记为 long long
:
__int64 fileAgeInFileTime2 = 24LL * 60LL * 60LL * 10000000LL;
或者将那些常量中的第一个标记为LL
,其他的被隐式转换:
__int64 fileAgeInFileTime2 = 24LL * 60 * 60 * 10000000;
某种转换也有效(其他变量也被隐式转换):
__int64 fileAgeInFileTime2 = static_cast<__int64>(24) * 60 * 60 * 10000000;
最后一行也应该说明原因
__int64 fileAgeInFileTime2 = 10000000;
fileAgeInFileTime2 *= 24 * 60 * 60;
有效。这会将四个 int
相乘,将结果转换为 int64
并将其乘以 fileAgeInFileTime2
。然后将总结果分配给 fileAgeInFileTime2
.
我不明白为什么这个程序会给出这个输出。这里是否发生溢出?
int _tmain(int argc, _TCHAR* argv[])
{
__int64 fileAgeInFileTime ;
fileAgeInFileTime = 24 *60 * 60 ;
cout << fileAgeInFileTime << endl;
fileAgeInFileTime *= 10000000;
__int64 fileAgeInFileTime2 = 24 *60 * 60 * 10000000 ;
cout << fileAgeInFileTime << " " <<fileAgeInFileTime2;
return 0;
}
O/P :
86400
864000000000 711573504
我不明白为什么 fileAgeInFileTime 和 fileAgeInFileTime2 有不同的值?
真正的要求是获取文件的 100 纳秒分辨率。
是的,你这里溢出了。当你用int
乘以int
时,结果也是int,所以你在计算24 * 60 * 60 * 1000000
时溢出了。在此之后,不正确的结果存储在 __int64
变量中。
Here 解释了算术运算符的类型转换
是的,有溢出。您将四个 int
常量相乘并将它们分配给 __int64
.
__int64
可以保存在 long long
中(自 C++11 起,long long
应该至少有 64 位)。您需要像这样将常量标记为 long long
:
__int64 fileAgeInFileTime2 = 24LL * 60LL * 60LL * 10000000LL;
或者将那些常量中的第一个标记为LL
,其他的被隐式转换:
__int64 fileAgeInFileTime2 = 24LL * 60 * 60 * 10000000;
某种转换也有效(其他变量也被隐式转换):
__int64 fileAgeInFileTime2 = static_cast<__int64>(24) * 60 * 60 * 10000000;
最后一行也应该说明原因
__int64 fileAgeInFileTime2 = 10000000;
fileAgeInFileTime2 *= 24 * 60 * 60;
有效。这会将四个 int
相乘,将结果转换为 int64
并将其乘以 fileAgeInFileTime2
。然后将总结果分配给 fileAgeInFileTime2
.