虽然std::abs
(或{em> C 开发人员的::abs
)未提升返回值,因此无法处理std::numeric_limit<T>::min()
,但我希望{ {1}}实施,可以进行更“安全”的处理。
abs
我还没想到的是,在升级到int之后(当删除减号时)如何防止转换警告。
有没有更优雅/正确的方法去除减号?
编辑:
现在对于INT_MIN和2complement应该是正确的。
答案 0 :(得分:0)
由于在使用“等级”低于int
的类型的算术运算时,类型提升为int
是不可避免的,因此我只看到两种方法来克服此警告:
return adder(!value, 1);
其中adder
函数是a
按位求和器。您可能会发现它是如何在硬件中实现的
自己实施一个。return static_cast<T>(-value)
。由于您没有任何可能导致类型T
溢出的算术运算,因此“取消”促销到int
绝对安全