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

发布于 2024-10-31 10:37:05 字数 195 浏览 0 评论 0原文

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

this may be a bit confusing. I have two numbers, say
x = 56 = 00111000
y = 50 = 00110010
we can see that there a total of 4 different bits between them. we need to take those bits and fill up part of the 8 bit register. and in the same way take another two numbers ( say there are another 4 bits different in them ) then fill up the remaining part of the 8 bit register.
Does anyone know how to do this using objective-c ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挥剑断情 2024-11-07 10:37:05

我不懂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

I don't know Objective-C, so wrote it in C and tested it. Hope you don't mind:

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;
}

The logic is: x ^ y (x XOR y) - gives the bit locations in which the numbers x and y are different. Test x with the bit value of x ^ y and push it into result. Repeat it with y and push it into result. Now right shift x ^ y by 1. Repeat until x ^ y != 0.

你另情深 2024-11-07 10:37:05

你可以使用差异

x = 56 = 00111000
y = 50 = 00110010

z = x | y

you can get difference using

x = 56 = 00111000
y = 50 = 00110010

z = x | y
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文