nel -= nel/2 在功能上等同于 nel /= 2 吗?

Is nel -= nel/2 functionally equivalent to nel /= 2?

我最近在 musl 的 bsearch 实现中发现了这段代码:

else if (sign < 0)
    nel /= 2;
else {
    base = try;
    nel -= nel/2;
}

nelsize_t.

nel -= nel/2 在功能上等同于 nel /= 2 吗?

没有。如果 nel 是奇数,那么 nel /= 2 中的结果将比 nel -= nel/2 中的结果少一个。

例如取3:

  • nel /= 2之后,nel将是1

  • nel -= nel/2之后,nel将是2

您的自我回答是正确的,但是特别是此代码,之后

base = try;

nel/2 项已被删除,不再考虑。如果此时你只是做了 nel /= 2,而 nel 很奇怪,你也会从进一步考虑中砍掉最后一项,可能会产生假阴性。

请注意,您正在查看的代码 was recently changed 始终截断在不相等的情况下比较的项目。