之間的差異,我與下面的代碼的問題:文件大小計算,Int64的,而32bit和64bit
var
FileSize : Int64;
...
FileSize := Info.nFileSizeLow or (Info.nFileSizeHigh shl 32);
我預料到,因爲Int64
類型賦值左側的工作。但事實並非如此。包含shl
的部分計算似乎會產生溢出。
所以我把它改爲:
FileSize := Info.nFileSizeLow or (Int64 (Info.nFileSizeHigh) shl 32);
其作品在我的32位操作系統上,但在Vista 64位不起作用!
最後,
FileSize := Info.nFileSizeHigh;
FileSize := FileSize shl 32;
FileSize := Info.nFileSizeLow or FileSize;
作品在兩個系統上。
有人可以解釋這三個版本的區別嗎?
我從來沒有想過使用`或`做到這一點的。我只需將高低部分粘貼到「Windows.TLargeInteger」中,並將「QuadPart」拖出合併值。 – 2011-02-10 15:38:30
雖然Integer和WORD可以使用相同的設計,但是.. – 2011-02-10 15:56:26
也許這只是我,但我對位移感到過敏,它只是讓我覺得不對! – 2011-02-10 16:10:59