繁体   English   中英

比较两个数字,获取其中的不同位,并填充一个16位寄存器Objective-C

[英]comparing two numbers, getting the different bits in them and filling up a 16bit register, objective-C

这可能有点令人困惑。 我有两个数字
x = 56 = 00111000
y = 50 = 00110010
我们可以看到它们之间总共有4个不同的位。 我们需要取这些位并填满8位寄存器的一部分。 并以相同的方式获取另外两个数字(例如,它们之间还有另外4位),然后填充8位寄存器的其余部分。 有谁知道如何使用Objective-C做到这一点?

我不了解Objective-C,所以用C编写并测试了它。 希望你不要介意:

unsigned int diffbits(unsigned int x, unsigned int y)
{
  unsigned int xor_xy = x^y;
  unsigned int result = 0;
  unsigned int count = 0;

  while (xor_xy)
  {
    if ( xor_xy & 0x01)
    {
      result |= ((x & (1 << count)) >> count);
      result <<= 1;

      result |= ((y & (1 << count)) >> count);
      result <<= 1;
    }

    ++count;
    xor_xy >>= 1;
  }

  // undo the last left shift of 'result' in the while-loop.
  result >>= 1;

  return result;
}

逻辑为: x ^ y (x XOR y)-给出数字xy不同的位位置。 x ^ y的位值测试x并将其压入result 重复y并将其推入result 现在右移x ^ y 1 重复直到x ^ y != 0为止。

您可以使用获得不同

x = 56 = 00111000
y = 50 = 00110010

z = x | y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM