我在一段我想要了解的代码中找到了这个。这可能是一些聪明的伎俩,但我不明白。什么时候
unsigned(x-dx)<unsigned(size)
正确? x , dx 和 size 都是(signed)int 。从我猜测的上下文来看,x-dx不应小于零且不大于大小。但我不明白 unsigned 技巧。
有人可以解释一下或告诉我在哪里可以找到更多关于它的信息吗?
事先提前答案 0 :(得分:8)
此代码确定x - dx
是否在[0
... size
)范围内:如果x - dx
为负数,则在投放到unsigned
时会变为大的正值signed
。此上下文中的大表示的值大于[int
] unsigned(x - dx) < unsigned(size)
类型的任何正值。也就是比较
x - dx
如果size
为非负且小于{{1}},则为真。
答案 1 :(得分:4)
说unsigned(anything)
本质上是一个强制转换操作,非常简单地说(unsigned) anything
。它导致其参数被视为无符号数,这意味着它只能表示大于或等于零的值。
如果x小于dx,则此代码将表现得很奇怪。 <{1}}表达式将成为一个大的正数。而不是负数。