你怎么旋转位

时间:2014-08-08 07:58:19

标签: c bits

我正在做作业

  • asr - 算术向右移位number1,number2位到右边的位(见下文)
  • rol - 将number1,number2位的位置向左旋转(见下文)
  • ror - 将number1,number2位的位旋转到右侧

我无法弄清楚如何做这个部分

这是我到目前为止所拥有的

int main()
{
    char n[90];
    char method[90];
    unsigned int num1;
    int methodlength;
    unsigned int num2;
    int d;
    unsigned int answer;

    printf("Type in an expression: ");

    gets(n);

    sscanf(n, "%x %s %x", &num1, method, &num2);



    if(strcmp(method, "asr") == 0)
    {
        printf("The answer is: %x", answer);
    }

    else if(strcmp(method, "rol") == 0)
    {
        printf("The answer is: %x", answer);
    }

    else if(strcmp(method, "ror") == 0)
    {
        printf("The answer is: %x", answer);
    }


}

2 个答案:

答案 0 :(得分:1)

您可以使用位掩码来播放位。

您可能会发现以下链接很有用 1. Wikipedia : Mask
2. Topcoder: Bitmasking

例如,ROL可以作为

完成
unsinged int arg = something;
unsigned int howmanytimes = some_other_thing;
unsigned int answer = (arg << howmanytimes) | (arg >> (sizeof(arg) * CHAR_BIT - howmanytimes));

在研究了一些关于屏蔽的内容之后,您应该能够理解该示例并自己编写其余的操作。如果你不了解任何具体的事情,请随时发表评论并提出要求。

答案 1 :(得分:0)

我不认为你可以使用一个简单的操作。您可以将它实现为“按位”和“移位”的组合: 左旋:用&amp;保存数字的前2位。 0xc0000000,然后向左移动2,然后用你保存的数字替换数字的最后几位。

如果需要,请参阅http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/BitOp/bitshift.html以获取有关位移的更详细说明。