我有以下结构
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与big值相乘,结果存储在unsigned int类型的temp值中,然后存储在int 64中?如果现在怎么会有任何溢出?
由于
答案 0 :(得分: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 );