[英]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)-给出数字x
和y
不同的位位置。 用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.