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:有关嵌套函数问题,请参阅此线程: