- 此问题在此处已有答案**:
Why does long long n = 200020002000*2000; overflow?(6个答案)
5天前关闭。
当我在uint64_t变量中使用左移时,如mask = 1 << 31
或以上,所有位左移1;
我正在使用:
Ubuntu 22.04;
gnu ++23;
带有c_cpp扩展名的vscode;
int main(int argc, char const *argv[])
{
uint64_t mask1{1};
uint64_t mask2{1};
mask1 = 1 << 30; // OK 1000000000000000000000000000000
mask2 = 1 << 31; // ERROR 1111111111111111111111111111111110000000000000000000000000000000
// Expecting 10000000000000000000000000000000
return 0;
}
1条答案
按热度按时间mrwjdhj31#
在此行中:
首先计算右侧的表达式,然后将其赋值给
mask2
。由于
1
是int
文字,因此表达式的计算结果为32位int
。按以下方式更改它,以实现您想要的:
它将
1
视为无符号64位值执行移位。具有类似结果的另一个选项是: