Can you please explain what's going on in this code (how is it multiplying by 4 as said in comments in code?):

```
 public static int GetNextSize(int i)
  {
    //multiply it by four and make sure it is positive
    return i > 0 ? i << 2 : ~(i << 2) + 1;
  }

```

Is there any better or cleaner way to do this? or is this one the optimum one? 

Also, any practical situations where this (or this type of) code will be helpful?

Thanks.