gpt4 book ai didi

c++ - 这里发生溢出了吗?

转载 作者:太空狗 更新时间:2023-10-29 20:37:49 24 4
gpt4 key购买 nike

我不明白为什么这个程序会给出这个输出。这里发生溢出了吗?

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;
}

订单:

86400

864000000000 711573504

我不明白为什么 fileAgeInFileTime 和 fileAgeInFileTime2 有不同的值?

真正的要求是获取文件的 100 纳秒分辨率。

最佳答案

是的,有溢出。您将四个 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

关于c++ - 这里发生溢出了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33671549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com