寒鸽儿 @ 2022-08-04 01:46:05
一个ub,因此卡了挺久的。
int k = 64;
(1ull << k) - 1;
好像在本机上跑出来是
(1ull << 64) - 1
跑出来是
by dk_qwq @ 2022-08-04 05:30:08
捉寒鸽儿(逃
by Loser_King @ 2022-08-04 08:36:46
对于有符号的非负
a
,若a\times 2^b 能以返回类型的无符号版本表示,则将该值转换到有符号后即是a << b
的值(这使得以1 << 31
创建INT_MIN
合法);否则行为未定义。 (C++20 前)
a << b
的值是与a\times 2^b 对2^N 同余的唯一值,其中N 是返回类型中的位数(即进行逐位左移并舍弃移出目标类型的位)。 (C++20 起)