64bit shift problem

64-bit, c++

Solution

When you shift a value by more bits than word size, it usually gets shifted by `mod word-size`. Basically, shifting it by 64 means shifting by 0 bits which is equal to no shifting at all. You shouldn't rely on this though as it's not defined by the standard and it can be different on different architectures.

Problem

Why this code does not write 0 as a last element but 18446744073709551615? (compiled with g++) ``` #include <iostream> using namespace std; int main(){ unsigned long long x = (unsigned long long) (-1); for(int i=0; i <= 64; i++) cout << i << " " << (x >> i) << endl; cout << (x >> 64) << endl; return 0; } ```

Original source