2012-07-12 96 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);