2012-07-31 92 views
-2

的情況下離奇結果我使用__int64數據類型在64位AIX和我正在比較的情況下,奇異結果與064位整數中的比較

代碼段:

__int64 indexExistingPart = GetValue(); // GetValue always returns -1. 

if (indexExistingPart < 0) 
{ 
    DoSomething(); //control never comes to this part of the code 
} 

我也嘗試將0賦值給另一個__int64變量並用於比較。但是,這也不起作用:

__int64 indexExistingPart = GetValue(); // GetValue always returns -1. 

__int64 temp =0; 

if (indexExistingPart < temp) 
{ 
    DoSomething(); //control never comes to this part of the code 
} 

爲什麼比較運算符不適用於64位整數?有什麼解決方法嗎?

+5

'__int64'不是標準的類型 - 它是如何定義,其中和?另外,GetValue()的返回類型是什麼? – 2012-07-31 10:00:23

+2

你確定__int64沒有簽名嗎? – 2012-07-31 10:03:30

+0

@Paul:GetValue()的返回類型很長。當我在AIX上使用__int64時,我沒有收到任何編譯錯誤。 – user1565291 2012-07-31 11:33:46

回答

0

症狀符合__int64是您項目中的unsigned long的typedef。 (__int64不是由AIX提供的類型,至少根據IBM文檔)嘗試這個代替:

#include <stdint.h> // or #include <sys/types.h>, or #include <inttypes.h> 

int64_t indexExistingPart = GetValue(); // or "signed long indexExistingPart ..." 

if (indexExistingPart < 0) 
{ 
    DoSomething(); 
}