在C++中,unsigned long long 是64位的。当你执行 a >> 64 时,你实际上是在将 a 向右移动它自身的位数。根据C++标准,如果移位数大于或等于移位操作数的位数,那么结果是未定义的。然而,在许多实现中,移位数通常会被取模为操作数的位数,这就是为什么 a >> 64 的结果仍然是 a 的原因。换句话说,a >> 64 相当于 a >> (64 % 64) ,即 a >> 0 ,所以 a 的值不变。
unsigned long long
a >> 64
a
a >> (64 % 64)
a >> 0