C++ 值中的串联位

C++ 值中的串联位,c++,algorithm,C++,Algorithm,我需要连接位,例如: 0x10 plus 0x12 = 0x1012 or 0x123 plus 0x4 = 0x1234 如果没有字符串类,我怎么做呢?您必须计算最右边值的排名 我相信,这样的事情应该会奏效: // Returns rank of the value increased by one (except, when value == 0) int rank(int value) { int result = 0; while (value > 0)

我需要连接位,例如:

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

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

您必须计算最右边值的排名

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

// 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(值==0时除外)
整数秩(整数值)
{
int结果=0;
而(值>0)
{
数值/=16;
结果++;
}
返回结果;
}
int main(int argc,char*argv[])
{
int left=0x12;
int right=0x34;

int sum=(左您必须计算最右边值的秩

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

// 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(值==0时除外)
整数秩(整数值)
{
int结果=0;
而(值>0)
{
数值/=16;
结果++;
}
返回结果;
}
int main(int argc,char*argv[])
{
int left=0x12;
int right=0x34;

int sum=(left您需要的是找到第二个数字中第一个十六进制数字的位置,将第一个数字相应地向左移动,然后对数字求和。要高效地找到二进制数字的第一个数字,请参见此处:
然后进行模4运算以找到第一个十六进制数字。

您需要的是找到第一个十六进制数字在第二个数字中的位置,将第一个数字相应地向左移动,然后对数字求和。要高效地找到二进制数的第一个数字,请参见此处:
然后进行模4运算以找到第一个十六进制数字。

我对术语有错误,我的意思是“串联”。例如,
0x1234
“加上”
0x0
?这应该是
0x12340
0x1234
?@PaulR,对于例如,
0x1234
“加上”
0x0000
,会发生什么情况:)我猜,
0x0
意味着没有加法。否则,它必须明确定义,在这种情况下应该移位多少位。我对术语有错误,我的意思是“串联”。例如,
0x1234
“plus”应该怎么办
0x0
?这是否应该是
0x12340
0x1234
?@PaulR以及例如
0x1234
“加上”
0x0000
?:)我猜,
0x0
意味着没有加法。否则,它必须明确定义,在这种情况下应该移位多少位。注意表达式中的运算符优先级,如Close。它应该是
sum=(左)总是假设4行吗?我不知道,我只是想看看它是否能跨平台工作。我想endianness并不重要,因为C的运算符可以保证这一点。是的。要将十六进制数字向左移动一位,必须精确移动4位(2^4=16)@legends2k不,因为等级等于你必须提高基数才能达到给定位置的幂。25分之5的等级是0,因为5=5*10^0。25分之2的等级是1,因为20=2*10^1。此外,等级是连续的-0.3分之3的等级等于-1。请注意,我返回的等级是从函数中增加1的,目的是o但这不会改变它们的定义。请注意表达式中的运算符优先级,如Close。它应该是
sum=(左)总是假设4行吗?我不知道,我只是想看看它是否能跨平台工作。我想endianness并不重要,因为C的运算符可以保证这一点。是的。要将十六进制数字向左移动一位,必须精确移动4位(2^4=16)@legends2k不,因为等级等于你必须提高基数才能达到给定位置的幂。25分之5的等级是0,因为5=5*10^0。25分之2的等级是1,因为20=2*10^1。此外,等级是连续的-0.3分之3的等级等于-1。请注意,我返回的等级是从函数中增加1的,目的是o但这并没有改变它们的定义。+1:idea的声音,但是“相应地将第一个数字向右移动”应该是左边的,“使模8”应该是模4,因为十六进制数字中有4位,就像Spok一样,你的算法只对正数起作用。+1:idea的声音,但是“相应地将第一个数字向右移动”应该是左,“使模8”应该是模4,因为十六进制数字中有4位,并且像Spook一样,您的算法只适用于正数。