C 如何旋转钻头

C 如何旋转钻头,c,bits,C,Bits,我在做作业 asr-算术右移数字1的位,数字2的位向右移动(见下文) rol-将数字1、数字2的位向左旋转(见下文) ror-将数字1、数字2的位向右旋转 我不知道怎么做这个部分 这是我到目前为止所拥有的 int main() { char n[90]; char method[90]; unsigned int num1; int methodlength; unsigned int num2; int d; unsigned int

我在做作业

  • asr-算术右移数字1的位,数字2的位向右移动(见下文)
  • rol-将数字1、数字2的位向左旋转(见下文)
  • ror-将数字1、数字2的位向右旋转
我不知道怎么做这个部分

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

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);
    }


}

您可以使用位屏蔽来播放位

您可能会发现以下链接很有用。
1.
2.

例如,ROL可以按如下方式进行

unsinged int arg = something;
unsigned int howmanytimes = some_other_thing;
unsigned int answer = (arg << howmanytimes) | (arg >> (sizeof(arg) * CHAR_BIT - howmanytimes));
unsinged int arg=something;
unsigned int howmanytimes=一些其他事物;
无符号整数应答=(arg>(sizeof(arg)*字符位-howmanytimes));

在学习了一些关于掩蔽的知识之后,您应该能够理解这个示例并自己编写其余的操作。但是,如果您不了解任何具体的事情,请随时发表评论和询问。

我认为没有一个简单的操作可以用于此。您可以将其实现为“按位and”和移位的组合: 对于向左旋转:将数字的前2位保存为&0xc0000000,然后向左移动2,然后将数字的最后一位替换为保存的位


如果需要,请参阅,以获取有关位移位的更详细解释。

到目前为止,您所拥有的与赋值无关;作业旨在展示您的学习。在寻求帮助之前,你应该做一个公平的尝试。@Clifford我要求不要包括作业的其余部分,请参阅@HostileFork:这不是我的观点-现在的代码片段对问题没有任何影响-它只是一个框架。这两个“(见下文)”与下文无关。关键是如何执行ROL和ROR操作——其他一切都是多余的。以获得更安全但仍对编译器友好的版本。