我遇到以下代码问题:
var
FileSize : Int64;
...
FileSize := Info.nFileSizeLow or (Info.nFileSizeHigh shl 32);
Run Code Online (Sandbox Code Playgroud)
我期望它能够工作,因为Int64任务的左侧类型.但事实并非如此.包含shl似乎产生溢出的部分计算.
所以我改成了:
FileSize := Info.nFileSizeLow or (Int64 (Info.nFileSizeHigh) shl 32);
Run Code Online (Sandbox Code Playgroud)
它适用于我的32位操作系统,但不适用于Vista 64位!
最后,
FileSize := Info.nFileSizeHigh;
FileSize := FileSize shl 32;
FileSize := Info.nFileSizeLow or FileSize;
Run Code Online (Sandbox Code Playgroud)
适用于两个系统.
有人可以解释这三个版本的差异吗?