例如:
以下是我的代码:
uint64_t int64ToUint64(int64_t value)
{
uint64_t uvalue = value - std::numeric_limits<int64_t>::min();
return uvalue;
}
它可以工作,但是有符号整数溢出,并且根据C ++标准,有符号整数溢出是未定义的行为。没有整数溢出的任何其他解决方案?
答案 0 :(得分:3)
由于已经很好地定义了从有符号类型到无符号类型的转换,并且因为无符号算术没有溢出,所以通过首先将有符号值转换为无符号类型,可以安全地执行所需操作:
uint64_t int64ToUint64(int64_t value)
{
uint64_t uvalue = value;
uvalue += INT64_MAX;
uvalue += 1;
return uvalue;
}
答案 1 :(得分:-2)
uint64_t int64ToUint64(int64_t value){
uint64_t res = *(reinterpret_cast<uint64_t*>(&value));
return res ^ numeric_limits<int64_t>::min();
}
int64_t uint64ToInt64(uint64_t value){
value ^= numeric_limits<int64_t>::min();
return *(reinterpret_cast<int64_t*>(&value));
}