Coder_Shubham_24's blog

By Coder_Shubham_24, history, 3 years ago, In English

I didn't get logic for these to lines

  1. f |= (ch == '-')
  2. x = (x << 1) + (x << 3) + (ch ^ 48);
template<class T>void read(T& x)
{
	x = 0; int f = 0; char ch = getchar();
	while (ch < '0' || ch>'9') { f |= (ch == '-'); ch = getchar(); }
	while (ch >= '0' && ch <= '9') { x = (x << 1) + (x << 3) + (ch ^ 48); ch = getchar(); }
	x = f ? -x : x;
	return;
}
  • Vote: I like it
  • +28
  • Vote: I do not like it

| Write comment?
»
3 years ago, # |
  Vote: I like it +10 Vote: I do not like it
  1. if (ch == '-') f = true;
  2. x = x * 10 + (ch - '0');
  • »
    »
    3 years ago, # ^ |
      Vote: I like it 0 Vote: I do not like it

    Thanks bro it helped me

    but why they are selecting only '-'(symbol) for 1st statement if(ch =='-')f=true; might be some seprator i guess

    • »
      »
      »
      3 years ago, # ^ |
        Vote: I like it +10 Vote: I do not like it

      x = f ? -x : x;

      It is to check if its a negative number.