Вы переполняете смену. Если вы заметили, GCC даже предупреждает вас:
warning: right shift count >= width of type
Как получилось? Вы включаете 64 в качестве допустимого сдвига, который является неопределенным поведением
от 0 до 64 - 65 номеров (в том числе 0). 0 - первый бит (очень похоже на массивы).
#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 >> 63) << endl;
return 0;
}
Будет выдавать ожидаемый результат.