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;
}
nel
是 size_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 始终截断在不相等的情况下比较的项目。
我最近在 musl 的 bsearch
实现中发现了这段代码:
else if (sign < 0)
nel /= 2;
else {
base = try;
nel -= nel/2;
}
nel
是 size_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 始终截断在不相等的情况下比较的项目。