【发布时间】:2024-01-22 00:59:02
【问题描述】:
u 和 v 是无符号整数
for (shift = 0; ((u | v) & 1) == 0; ++shift)
{
u >>= 1;
v >>= 1;
}
我无法理解 ((u | v) & 1) == 0 逻辑,如果 u = 9 和 v = 10 会怎样,逻辑函数的返回是什么。
【问题讨论】:
-
你试过用C编译器编译这个函数并运行它吗?
-
它将
u和v都向右移动,直到设置了其中一个的最低位。 -
抛开逻辑不谈,这也是一个等待发生的无限循环。
-
只要
u和v都是偶数,则代码都除以2。只有奇数才设置其LSB。shift只计算应用的分区数。它在显示的代码中没有用,因为它只存在于循环中并且不在那里使用。 -
@alk
shift未在循环中声明(仅初始化),因此循环终止后它将在范围内。
标签: c computer-science