最近我听说 C 中的有符号/无符号比较可能很棘手,例如,有符号/无符号比较还有其他一些问题。
我的问题是 - 如果我们必须将有符号类型与无符号类型进行比较(例如,包括 =、>、存在哪些策略可以避免这种比较产生的问题?
或者我们应该确保我们总是只比较int
with int
and unsigned
with unsigned
?
附言。也很高兴知道when这样的比较有危险吗?
最好提前确保您的类型匹配。但如果你不能:
如果您知道int
此时肯定不会持有负值,将其转换为unsigned
.
如果您知道unsigned
值将小于INT_MAX
,将其投射到int
.
如果这两个值都不成立,请将这两个值转换为足够大的类型,以容纳您需要能够处理的所有可能的值。另一种可能性(当没有足够大的类型时)是使用两次比较:首先比较int
与 0,如果它是非负数,则将其转换为unsigned
并与unsigned
value.
如果你不投射任何东西,int
将被投射到unsigned
,但如果这是您想要做的,最好明确说明这一点。
比较int
with unsigned
将无法正常工作时int
具有负值。这是因为它将被隐式转换为unsigned
这将改变它的价值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)