Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 比较两个数字,获取其中的不同位并填充16位寄存器,objective-C_Iphone_Objective C_Xcode_Bit Manipulation - Fatal编程技术网

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

Iphone 比较两个数字,获取其中的不同位并填充16位寄存器,objective-C,iphone,objective-c,xcode,bit-manipulation,Iphone,Objective C,Xcode,Bit Manipulation,这可能有点混乱。我有两个数字,比如说 x=56=00111000 y=50=00110010 我们可以看到它们之间总共有4个不同的位。我们需要获取这些位并填充8位寄存器的一部分。同样地,取另外两个数字(假设其中还有4位不同),然后填充8位寄存器的剩余部分。 有人知道如何使用objective-c实现这一点吗 您可以使用 x = 56 = 00111000 y = 50 = 00110010 z = x | y 我不知道Objective-C,所以用C编写并测试了它。希望你不介意: unsig

这可能有点混乱。我有两个数字,比如说
x=56=00111000
y=50=00110010
我们可以看到它们之间总共有4个不同的位。我们需要获取这些位并填充8位寄存器的一部分。同样地,取另外两个数字(假设其中还有4位不同),然后填充8位寄存器的剩余部分。
有人知道如何使用objective-c实现这一点吗

您可以使用

x = 56 = 00111000
y = 50 = 00110010

z = x | y

我不知道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;
}
unsigned int diffbits(unsigned int x,unsigned int y)
{
无符号整数xor_xy=x^y;
无符号整数结果=0;
无符号整数计数=0;
while(xor_xy)
{
if(xor_xy&0x01)
{
结果|=((x&(1>计数);
结果>=1;
返回结果;
}

逻辑是:
x^y
(x或y)-给出数字
x
y
不同的位位置。使用
x^y
的位值测试
x
,并将其推入
result
。使用
y
重复该操作,并将其推入
result
。现在将
x^y
右移
1
。重复操作,直到
x^y!=0

什么是“填充8位寄存器的一部分”意思?什么是“填充8位寄存器的其余部分”意思?请举例说明,或者更好的是,告诉我们为什么要这样做。因此,在您的示例中,您希望在位2中取
01
(假设您从1开始位索引)和
10
bit-4,并将其作为
0110
1001
推入寄存器。我的理解正确吗?这56和50是在两个iTouch中执行的抖动事件的输出。因此,让我们取一个8位寄存器。然后,我们可以看到有4位不同。因此,我们可以将这些位放入8位寄存器。然后,在再次摇动两个iTouch,我们得到另外两个数字。不同的位再次被放在8位寄存器的剩余位置。我希望这会产生一些影响sense@yasouser:是的,这就是rit。任何人都可以使用它。iPhone有32位寄存器和一些64位寄存器,并且(在armv7上)甚至是一些128位的。你不是指XOR(^)吗?或者根本不是“区别”当我阅读OPs问题时,我不需要xor。我需要比较两个数字时不同的位。然后将它们放入8位register@user640599按位异或,代表异或,意味着如果两个数字中的位不同,则将设置位。是的,这是可以的。我理解整个代码,但我自己很善良一个新的目标c。所以我不知道如何将它转换成目标c。据我所知,目标c是c的严格超集。所以
diffbits()
这样的函数也应该在Objective-C中工作。当我尝试执行上述代码时,就会出现这种情况。嵌套函数被禁用,请使用-fnested函数重新启用。你知道这是什么吗?@user531:有关嵌套函数问题,请参阅此线程: