如何在Windows中將__int64轉換爲long(MSVC8 & MSVC6)?在Windows中將__int64轉換爲long
將正常類型轉換工作?
另外,如何將長轉換爲__int64?如果多頭是一個負值,它會起作用嗎?
注 - 我正在談論__int64變量總是包含一個不超過32位長的值的情況。
如何在Windows中將__int64轉換爲long(MSVC8 & MSVC6)?在Windows中將__int64轉換爲long
將正常類型轉換工作?
另外,如何將長轉換爲__int64?如果多頭是一個負值,它會起作用嗎?
注 - 我正在談論__int64變量總是包含一個不超過32位長的值的情況。
1。轉換長到__int64
Acorrding到MSDN上__int64
關鍵字:
的_ _int64關鍵字聲明新的 型,64位(8字節)整數。由於 與int,short和long類型 _ _int64類型具有相應的 未簽名版本,因此_ _int64 關鍵字實際上可用於創建 兩種類型。
以下代碼示例示出了如何 聲明兩個64位整數,一個 簽署和其他無符號:
__int64 signed_big_int; unsigned __int64 unsigned_big_int;
__int64
簽訂後,它應該比long
更寬。所以你可以分配給long
不__int64
甚至一個類型轉換,當然還有signed __int64
支持負長。
2.轉換__int64長
它是確定__int64
轉換爲long
,只有失去data.My msvc8只是提醒我數據丟失的pssibility的可能性。
3.注意:
C99定義在stdint.h
命名int64_t
和未簽名版uint64_t
。如果你想提供可移植的代碼標準的64位整數類型,你應該使用他們,但不__int64
。
公告中有C++編程語言沒有標準的64位整數類型,MSVC使用__int64
,但在Linux世界中通常使用int64_t
或uint64_t
它的類型定義爲C99的stdint.h
。在這裏long long
或unsigned long long
我假設你的C++編譯器支持stdint.h
頭文件。
是的,類型轉換將會很好,只要你能保證你的__int64值總是在一個long範圍內。無論所涉及的值如何,從另一個方向(即從long到__int64)投射都不會成爲問題。
這是一個小測試。
#include <limits.h>
int main(int argc, char *argv[])
{
__int64 i64;
long i;
i64 = -1;
i = (long)i64;
printf("i=%d\n", i);
i64 = INT_MAX;
i = (long)i64;
printf("i=%d\n", i);
i64 = INT_MIN;
i = (long)i64;
printf("i=%d\n", i);
i64 = i;
printf("i64=%I64d\n", i64);
}
的輸出是::
i=-1
i=2147483647
i=-2147483648
i64=-2147483648
32位值可以被分配給64比特變量沒有任何問題,簽署或如果編譯/W3
的顯式轉換是必要的,以避免警告無符號。將64位值分配給32位變量可以完成,但如果需要超過32位來存儲該值,則可能會丟失數據,因爲它將被截斷以適合較小的變量。