gpt4 book ai didi

c - 如何比较有符号和无符号(并避免问题)

转载 作者:太空狗 更新时间:2023-10-29 15:38:34 25 4
gpt4 key购买 nike

最近我听说有符号/无符号比较在 C 中可能很棘手。例如,Signed/unsigned comparisons以及其他一些问题。

我的问题是 - 如果我们必须将 singed 类型与 unsigned 进行比较(例如,包括 =、>、< 运算符),存在哪些策略可以避免此类比较产生的问题

或者我们应该确保我们始终只比较 intint 以及 unsignedunsigned

附言。另外,如果知道什么时候这样的比较是危险的,那会很好吗?

最佳答案

最好事先确保您的类型匹配。但如果你不能:

如果您知道 int 此时肯定不会持有负值,请将其转换为 unsigned

如果您知道 unsigned 值将小于 INT_MAX,请将其转换为 int

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

如果您不进行任何转换,int 将被转换为 unsigned,但如果这是您想要执行的操作,最好对此明确说明。

int 为负值时,比较 intunsigned 将无法正常工作。这是因为它将隐式转换为 unsigned 并且这将更改其值。

关于c - 如何比较有符号和无符号(并避免问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22846231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com