See this discussion:
As a short summary, your compiler is free to evaluate these constant expressions either at compile time or at runtime.
However, your compiler needs to at least evaluate the types of a given constant expression to provide compile-time typing errors.
Thus most compilers automatically perform the appropriate calculations as well for optimization purposes.
long long i = 1LL \<\< 35;
commonly is precalculated, but may also be explicitly calculated on weird compilers.
Just have a look at your compiler output for the appropriate line for the actual behaviour.
I generally don't bother with providing constant type specifiers, since I think code is more readable without them. However, I add them whereever required to solve typing problems.
float myValue = 1;
float myValueToo = MyInteger / 7.f;
Hope this helps,