[英]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.