这是做什么的?如果(无符号(X-DX)

时间:2014-08-22 20:53:32

标签: c++ comparison unsigned

我在一段我想要了解的代码中找到了这个。这可能是一些聪明的伎俩,但我不明白。什么时候

    unsigned(x-dx)<unsigned(size)

正确? x dx size 都是(signed)int 。从我猜测的上下文来看,x-dx不应小于零且不大于大小。但我不明白 unsigned 技巧。

有人可以解释一下或告诉我在哪里可以找到更多关于它的信息吗?

事先提前

2 个答案:

答案 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}}表达式将成为一个大的正数。而不是负数。