2012-07-12 92 views
0

我有以下結構轉換INT32的倍增效應INT64

struct { 
    int myData; 
    int myAnotherData; 
}Value; 

struct AnotherStructure { 
    unsigned int uiLowData; 
    unsigned int uiHighData; 
}; 

AnotherStructure m_AnotherStructure; 
Value val; 
val.myData = 10; 
#define MULTIPLY 36000000000 

unsigned __int64 &internalStructure = *(unsigned __int64*)&m_AnotherStructure; 
internalStructure = 0; 
internalStructure += ((unsigned __int64)val.myData * MULTIPLY); 

我的問題是沒有在上述情況下,我們乘大值unsigned int類型數據的任何溢出,則結果存儲在類型的溫度值無符號整型,然後存儲在int 64?如果現在如何不會有任何溢出?

感謝

回答

0

val.myData是之前強制轉換爲無符號__int64 乘法,因爲你明確地投。 仍會發生溢出,具體取決於val.myData中存儲的值 - 最大的int乘以36000000000將不適合64位。 並且你放棄了你的代數符號。

你應該試試這個:

struct AnotherStructure { 
    int64_t uiLowData; 
    int64_t uiHighData; 
}; 
// signed_128bit_integer: look into your compiler documentation 
signed_128bit_integer &internalStructure = *(signed_128bit_integer*)&m_AnotherStructure; 
internalStructure = 0; 
internalStructure += ((signed_128bit_integer)val.myData * MULTIPLY);