值中的连接位

时间:2013-06-20 06:41:13

标签: c++ algorithm

我需要连接位,例如:

0x10 plus 0x12 = 0x1012
or
0x123 plus 0x4 = 0x1234

如果没有字符串类,我该怎么做?

2 个答案:

答案 0 :(得分:3)

您必须评估最右边的值的等级。

我相信,这样的事情应该有效:

// Returns rank of the value increased by one (except, when value == 0)
int rank(int value)
{
    int result = 0;
    while (value > 0)
    {
        value /= 16;
        result++;
    }

    return result;
}

int main(int argc, char * argv[])
{
    int left = 0x12;
    int right = 0x34;

    int sum = (left << (4 * rank(right))) + right;

    printf("%x\n", sum);
}

答案 1 :(得分:1)

你需要的是找到第二个数字中第一个十六进制数字的位置,相应地将第一个数字向左移动然后对数字求和。要有效地找到二进制数的第一个数字,请参见此处:http://en.wikipedia.org/wiki/Find_first_set 然后进行模4运算以找到第一个十六进制数字。