You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C标准中,long long类型左移是否属于未定义行为?

(1LL << 63)在C标准中的行为判定

1LL是有符号64位整数类型(long long),C标准规定long long的位数至少为64位。结合各版本C标准对移位运算符的规则,结论如下:

  • 对于有符号整数的左移操作,所有C标准(C99、C11、C17等)均明确:若移位结果超出该有符号类型的取值范围,行为为未定义。
  • long long的取值范围是[-2^63, 2^63 - 1],而1LL << 63的计算结果是2^63,显然超出了该类型的最大值,因此这个操作在任意C标准中都属于未定义行为。

补充:如果使用无符号64位整数进行移位,比如1ULL << 63,则属于合法行为——无符号整数的左移是定义明确的模运算,结果2^63在unsigned long long的取值范围内(0到2^64 - 1)。

内容的提问来源于stack exchange,提问作者lol lol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:22:00