C 扩展十六进制数

C 扩展十六进制数,c,bit-manipulation,bit,C,Bit Manipulation,Bit,所以我有以下十六进制数: 0x55 which is 0101 0101 我需要把它扩展到0x5555。我只能使用以下操作: Legal ops: ! ~ & ^ | + << >> 法律行动:!~&^ |+> 我有点困惑我该怎么做。我知道我们肯定要向左走。我相信这是一个简单的问题,所以我很抱歉,我现在无法再思考了。好吧,你有8位,需要再复制3份。一种方法是复制一个16位的数字,然后再复制两个,这样就得到了32位。要复制,请将所需的位数向左移位,并与原件一

所以我有以下十六进制数:

 0x55 which is 0101 0101
我需要把它扩展到0x5555。我只能使用以下操作:

Legal ops: ! ~ & ^ | + << >>
法律行动:!~&^ |+>

我有点困惑我该怎么做。我知道我们肯定要向左走。我相信这是一个简单的问题,所以我很抱歉,我现在无法再思考了。

好吧,你有8位,需要再复制3份。一种方法是复制一个16位的数字,然后再复制两个,这样就得到了32位。要复制,请将所需的位数向左移位,并与原件一起“或”<代码>无符号x=0x55;x |=x这现在很有道理!谢谢@gene如果你不被“允许”使用赋值运算符,真倒霉,没有办法这么做。op不被“允许”使用赋值运算符。
#include <stdio.h>

int main( )
{
    unsigned int orig = 0x55;
    unsigned int new;

    new = orig | orig << 8 | orig << 16 | orig << 24;

    printf( "orig: 0x%x\n", orig );
    printf( "new:  0x%x\n", new );

    return 0;
}
orig: 0x55
new:  0x55555555