【问题标题】:What is this logic function?这个逻辑函数是什么?
【发布时间】: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编译器编译这个函数并运行它吗?
  • 它将uv 都向右移动,直到设置了其中一个的最低位。
  • 抛开逻辑不谈,这也是一个等待发生的无限循环。
  • 只要uv 都是偶数,则代码都除以2。只有奇数才设置其LSB。 shift 只计算应用的分区数。它在显示的代码中没有用,因为它只存在于循环中并且不在那里使用。
  • @alk shift 未在循环中声明(仅初始化),因此循环终止后它将在范围内。

标签: c computer-science


【解决方案1】:

如果u = 9,则u的二进制位表示为...1001

如果v = 10,则v的二进制位表示为...1010

如果您使用| 二进制或这些值,您将得到...1011

如果您现在将上述值与1 进行二进制处理(即二进制...0001),您将得到...0001

最后,如果您使用== 比较二进制...00010,值是不同的,因此== 运算符的结果将是0

【讨论】: