簡體   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