当我将32位无符号数字添加到32位有符号数时,我想进行以下检查:
实现这一目标的最干净/最佳方式是什么?
答案 0 :(得分:4)
我建议将两者都转换为带符号的64位类型,执行添加,然后执行检查(可能使用min
/ max
宏/函数。)
答案 1 :(得分:1)
uint32_t add_sat(uint32_t a, int32_t b) {
if (b < 0 && a < -(uint32_t)b) return 0;
if (b > 0 && a + b < a) return UINT32_MAX;
return a + b;
}
答案 2 :(得分:0)
@OliCharlesworth ......这个怎么样?
unsigned int safe_add(long long a, long long b)
{
long long int result = (a + b);
if(result <= 0)
{
return 0;
}
if(result > UINT_MAX)
{
return UINT_MAX;
}
return result;
}