Left-shifting an uint64_t zeroes out most significant dword

The title sums it up: left-shifting an uint64_t doesn't output the expected value, and I'd like to know why. What I get is the expected result with its 4 most significant bytes zeroed out.
I'm using an x86_64 CPU (Intel i7 3770k), on Debian Jessie 64bit. This is a test program that reproduces the same behavior.