C编程中的左移

问题描述 投票:0回答:1

所以我正在Visual Studio上使用C,我有三个输入:abc。我目前已对其进行了设置,因此我可以为每个输入输入用户定义的条目,但只能输入01

Initialisation

int selection;
 int A;
 int B;
 int C;
unsigned char output;
_Bool runProgram = 1;

User Input

_Bool Results(_Bool needThirdInput)
{
    printf("\nEnter your value for A: ");
    scanf_s("%d", &A);
    printf("Enter your value for B: ");
    scanf_s("%d", &B);

    if (A == 0 || A == 1)
    {
        if (B == 0 || B == 1)
        {
            if (needThirdInput)
            {
                printf("Enter your value for C: ");
                scanf_s("%d", &C);

                if (C == 0 || C == 1)
                {
                    return 1;
                }
            }
            else
            {
                return 1;
            }
        }
    }

    printf("Input A must be either 1 or 0\n\n\n");
    return 0;
}

所以我需要将数字保留为二进制,所以可以说我输入abc111

我相信我需要输出110作为左移。

如果是右移,我将需要011

我将如何正确完成左移过程?

下面有人建议,但似乎不起作用。

Function

output = (A << 2) | (B << 1) | (C << 0);

printf("\n The output for Shift Left is %d\n\n\n", output); 
c visual-studio shift
1个回答
0
投票

使用

output = (A << 2) | (B << 1) | (C << 0);

您构造原始值(例如二进制111)。然后,您需要转换该值以获得所需的结果:

output = ((A << 2) | (B << 1) | C) << 1;
© www.soinside.com 2019 - 2024. All rights reserved.