繁体   English   中英

如何使用左移按位运算符获取输入?

[英]How to get input using the left-shift-bitwise operator?

#include<stdio.h>

long scan()
{
    long int t = 0;
    char c;
    c = getchar_unlocked();
    while (c < '0' || c>'9')
        c = getchar_unlocked();
    while (c >= '0' && c <= '9')
    {
        **t = (t << 3) + (t << 1) + c - '0'; **
            c = getchar_unlocked();
    }
    return(t);
}

int main()
{
    int t, a[110], n, i; long long int c, sum;
    t = scan();
    while (t--)
    {
        sum = 0;
        scanf("%d%lld", &n, &c);
        for (i = 0; i < n; i++)
        {
            a[i] = scan();
            sum += a[i];
        }
        if (sum <= c) 
            printf("Yes\n");
        else 
            printf("No\n");
    }
    return 0;
}

请帮助我理解“**”中的行。 我知道左移运算符 n 将数字乘以 2^n。 所以 t 首先乘以 8,然后乘以 2。但这如何帮助我们获得输入?

scan() 函数获取输入并返回它。

您用星号指示的行无助于获取输入,它所做的只是根据c的当前值更新变量t的值。

调用getchar_unlocked()从 stdin 获取下一个字符并返回它,程序将该值存储在变量c

程序期望字符是数字 ASCII 数字,因此(c-'0')的计算值将介于 0 和 9 之间。 对于这些值中的每一个,它等效于t = (t*8) + (t*2) + the_computed_value; ——我不确定它的意图是什么,但这就是它正在做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM