如何比较已签名和未签名(并避免问题)

最近我听说签名/未签名的比较在C中可能很棘手,例如
Signed/unsigned comparisons以及其他一些问题.

我的问题是 – 如果我们必须将singed类型与unsigned(例如,包括=,>,

最佳答案 最好确保您的类型提前匹配.但如果你不能:

如果你知道int肯定不会在那个时候保持负值,那么将它转换为unsigned.

如果您知道无符号值将小于INT_MAX,则将其强制转换为int.

如果这些都不成立,则将两个值都强制转换为足以容纳您需要能够处理的所有可能值的类型.另一种可能性(当没有足够大的类型时)是使用两个比较:首先将int与0进行比较,如果它是非负的,则将其转换为无符号并与无符号值进行比较.

如果你没有转换任何东西,int将被转换为unsigned,但如果你想要做的话,最好明确一下.

当int具有负值时,将int与unsigned进行比较将无法正常工作.这是因为它将隐式转换为无符号,这将改变其值.

点赞