Loh*_*eek -2 c++ bit-manipulation bit-shift
我正在尝试使用C++中的位数组数据结构.这是一种简单的好奇心,但我该如何解释:
uint64_t a = 1;
uint64_t b = a << 1;
cout << (a == (a << 64)) << endl; // get 1
cout << (a == (b << 63)) << endl; // get 0
Run Code Online (Sandbox Code Playgroud)
看起来像<< x是循环的时候x >= 64,但是填充时用零填充x < 64.我错了吗 ?
如果没有,解释是什么?我认为64位整数不是自然周期性的.
根据[ expr.shift ]:
如果右操作数为负数,或者大于或等于提升左操作数的位长度,则行为未定义.
因此,这是未定义的行为:
uint64_t a = 1;
a << 64;
Run Code Online (Sandbox Code Playgroud)