I have learnt that using `getchar_unlocked` is fast way of reading input. I have seen the code to read at many places but was unable to understand. Can anyone please help me understand how to read using `getchar_unlocked` ?
Thanks in Advance. 

```
void scanint(int &x)
{
 register int c = getchar_unlocked();
 x = 0;
 for(;(c<48 || c>57);c = getchar_unlocked())
  ;
 for(;c>47 && c<58;c = getchar_unlocked()) 
 {
   x = (x<<1) + (x<<3) + c - 48;
 }
}

```

I have seen many other codes as well. I dont particularly understand the purpose of shifting the number. Any help regarding that is appreciated